CPUもディスクも使いすぎないにもかかわらず、なぜ負荷が高いのか


20

から次の出力を取得していますtop

Cpu(s): 43.8%us, 32.5%sy,  4.8%ni,  2.0%id, 15.6%wa,  0.2%hi,  1.2%si,  0.0%st
Mem:  16331504k total, 15759412k used,   572092k free,  4575980k buffers
Swap:  4194296k total,   260644k used,  3933652k free,  1588044k cached

次の出力がiostat -xk 6表示されます。

Device: rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda       0.00   360.20   86.20  153.40  1133.60  2054.40    26.61     1.51    6.27   0.77  18.38
sdb       0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd      22.60   198.80   17.40   31.60   265.60   921.60    48.46     0.18    3.70   1.67   8.20
sdc      16.80   218.20   22.20   23.40   261.60   966.40    53.86     0.21    4.56   1.49   6.78

上記に基づいて、何かをオーバーロードする必要があるように見えます。でも何?

ご質問

  1. ハードディスクでもCPUでもない場合はどうしますか?
  2. CPUの時間の15.6%が待機に費やされているようです。何を待っているのでしょうか?

2
CPUの仕様と負荷はいくらですか?
2014

負荷が100を超えている
user4951

負荷はCPUおよびCPUコアの数に比例しますが、システムのCPU仕様は何ですか?
2014

回答:


49

明確化のポイントとして、負荷はCPUに直接結びついていません。これは、負荷に関する最も一般的な誤解の1つです。あなたがディスクに言及しているという事実は、あなたがこれに気づいていることを認めているように見えますが、私はそれを言及したかったのです。

負荷は、システムリソースで待機しているプロセスの数として定義されます。これは通常、CPU、ディスク、またはネットワークですが、実際にはハードウェアであれば何でもかまいません。
「プロセス」も必ずしも完全なプロセスではありません。スレッドは「軽量プロセス」として定義され、待機中の各スレッドは負荷カウントを増やします。


問題のあるプロセスを特定するには:

実行top -H-Hスレッドの表示を有効にします)

キーボードショートカットはバージョンによって異なります。

新しいトップ(3.3以降)の場合:

を押しfて、フィールドオプションを表示します。
矢印キーを使用してに移動しS = Process Status、を押しsます。
を押しqてメインページに戻ります。ソートを逆にするには、+ を
押します。ShiftR

古いトップ(3.3以前):

Shift+ oを押して、並べ替えオプションを表示します。
次にw、プロセスのステータスでソートします。
次にEnter、メインページに戻ります。
次に、Shift+ Rを押して並べ替えを逆にします。

次に、S列でDまたはを持っているプロセスを探しますR(現在は上部にあるはずです)。これらは、システムの負荷に寄与するプロセスになります。

プロセスにが表示される場合D、それは「割り込み不可能なスリープ」を意味します。通常、これはプロセスがI / O(ディスク、ネットワークなど)で待機しているときに発生します。
プロセスにが表示される場合R、それは通常の計算を行っていることを意味します。


それらのプロセスが何をしているのかをもっと知るには:

新しいトップ(3.3以降)の場合:

を押しfて、フィールドオプションを表示します。
矢印キーを使用して移動しWCHAN = Sleeping in Function、を押しdて有効にします。
次にq、メインページに戻ります。

古いトップ(3.3以前):

f次にyWCHANフィールドを有効にするために押します。

システムに必要なカーネルオプションがあり、システムにwchanファイルが存在する場合(場所と名前は忘れますWCHANフィールドにはプロセスが現在実行しているカーネル機能が表示されます(フィールドに表示されるのは-または?すべてについては、サポートはありません)。
ここでグーグルのビットとあなたはあなたの方法にあるはずです。

wchanのサポートがない場合straceは、プロセスをいつでも試して、何をしているかを調べることができますが、それは難しい方法です。


通常、左矢印を押すだけでソートを変更できます。
ニモ

2

ジョブのコンパイルやループ内のプロセスの失敗など、寿命の短いプロセスは、topまたはiostatなどの監視ツールでは表示されないことがよくあります。

そのような場合、Linux Audit Frameworkが役立ちます

犯人、たとえば障害ループ

while :; do gcc /dev/zero ; done >/dev/null 2>&1

auditd / auditctlを使用するには:

apt-get install auditd
auditctl -a task,always
ausearch -i -sc execve

すべてのプロセス起動のログから盗まれた


それらがに表示されていない場合、それらはtopおそらく負荷平均に寄与していません。負荷平均に寄与するためには、長時間待機状態である必要があります。統計的には、これはに表示されることを意味しtopます。そうでない場合、それは重要な貢献者ではありません。
パトリック

0

NFSマウントが切断された状況がありましたが、残念ながらミスをしてソフトマウントオプションを使用しなかったため、監視、lsof、bashセッションなど、Linuxサーバーで多くのプロセスが停止しました。

壊れたマウントをアンマウントした後、システムは過負荷に見えました。

top - 00:03:48 up 15 days, 14:56,  3 users,  load average: 29, 21, 20

これはひどいように見えましたが、CPU使用率は15%未満で、ディスクI / Oはありません。psを実行するためのアドバイスをいくつか受けましたが、プロセスがほとんどスリープ状態にあるように見えたので、これは役に立ちませんでした。

それからman ps睡眠のために私の夜を救いました、そして、調査の後、私は非常に重要なSTATUSフラグを見ました、後でそれらがスタックしたプロセスであると識別したので。

実行:

ps -e v

STAT列があるDSL、STAT列にあるプロセスを探します。これらはゾンビプロセスに似ていましたが、Zゾンビとしては識別されませんでした。

D-主にディスク(I / O)アクティビティを意味しますが、ps -e v数回実行してもアクティビティがない場合iostat 3は、これがI / Oでスタックしていることを示しています。

SL-そのプロセスのメモリにロックされたページが存在することを意味します。したがって、このプロセスがこのように振る舞うべきではないと特定できる場合、変更せずに長期間使用すると次の候補になります。

調査後、私は1つずつ殺し、システムの平均負荷は正常になりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.