法医学

法医学

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

トップ

htop恥ずかしいほど低いCPU使用率:ここに画像の説明を入力してください。

トップ

ここに画像の説明を入力してください。

ネットワーク統計

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/を使用してpsD状態のプロセスを見つけて、そこで問題を解決します。

答え2

Linux は、ほとんどの Unix シリーズオペレーティングシステムとは異なり、ロード計算のための参照として CPU を使用するか、実行キューから CPU を待つプロセスを計算するだけでなく、実行中のプロセス (実際にスレッド数) を追加します。 。ノンストップ状態、ディスク、またはネットワークI / Oが完了するのを待っています。後者は実際にアイドル状態です。つまり、CPUを使用しません。

それでは、おそらく(そうではありませんが)高い負荷を心配する必要はありません。あなたが探しているプロセスは、おそらくシングルスレッドredisと一時カーネルスレッドです。

関連情報