Redisを実行しているUbuntuサーバーがあり、負荷の高い問題が発生しました。
法医学
稼働時間
# uptime
05:43:53 up 19 min, 1 user, load average: 2.96, 2.07, 1.52
男の名前
# sar -q
05:24:00 AM LINUX RESTART
05:25:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
05:35:04 AM 0 116 3.41 2.27 1.20 4
Average: 0 116 3.41 2.27 1.20 4
トップ
トップ
ネットワーク統計
34の開いたredis-server
関係:
$ sudo netstat -natp | grep redis-server | wc -l
34
無料
$ free -g
total used free shared buffers cached
Mem: 14 6 8 0 0 2
-/+ buffers/cache: 4 10
Swap: 0 0 0
高い負荷を引き起こし、ステータスエントリを待つプロセスをどのように知ることができますかRunning
?接続が多すぎますか?
答え1
iowaitが高いため、予期しない負荷平均が発生する可能性があります。上部の98.7はwa
これを示しています。スクリーンショットでは、kworkerプロセスも中断のない省電力状態(上部のD状態)にあることがわかります。これは、プロセスがディスクI / Oが完了するのを待つときに発生します。
vmstat
実行キューを理解できます。毎秒の更新はvmstat 1
通常の方法で行われます。sar
r列には、カーネルがloadavgの計算に使用する実行可能/実行中のプロセスが表示され、b列にはディスクI / Oを待ち、ブロックされたプロセス(ノンストップスリープモードとも呼ばれます)が表示されます。 bのプロセスはloadavg計算に追加されるため、iowaitは未知のloadavgを生成します。
したがって、どのプロセスが高い負荷平均を引き起こすかを判断する方法に関する質問に答えるには、iowaitの場合はtop
/を使用してps
D状態のプロセスを見つけて、そこで問題を解決します。
答え2
Linux は、ほとんどの Unix シリーズオペレーティングシステムとは異なり、ロード計算のための参照として CPU を使用するか、実行キューから CPU を待つプロセスを計算するだけでなく、実行中のプロセス (実際にスレッド数) を追加します。 。ノンストップ状態、ディスク、またはネットワークI / Oが完了するのを待っています。後者は実際にアイドル状態です。つまり、CPUを使用しません。
それでは、おそらく(そうではありませんが)高い負荷を心配する必要はありません。あなたが探しているプロセスは、おそらくシングルスレッドredis
と一時カーネルスレッドです。