異常な高負荷とcpu utilを備えたサーバーがありますが、その理由はわかりません。 topを実行すると、すべてのprocが非常に低いCPUのように見えます。
http://cl.ly/2d1g0K3q261r0R0K3e35
これを引き起こしているものを探すより良い方法はありますか?
このバグ はあなたのケースだと思います。出力からわかるように、十分なメモリ(キャッシュされた14 GB程度に注意)があり、I/Oの問題はありませんが、xen関連のプロセスが実行されています。これはバグだと思います。
負荷は、システムが1分、5分、15分の負荷を測定したものです。
最も一般的な誤解は、負荷平均が純粋にシステムのCPU使用率に関連しているというものです。
ただし、負荷には、I/Oを待機しているCPUなどの追加の測定が組み込まれていますが、これは問題だと思います。
画像に基づいて、私はあなたがメモリを使い果たし、データをディスクにスワップし始めたと推測しています。
単純なfree -m
は、RAMおよびスワップの使用量を示します。
興味深い列は、-/+ buffers/cache
以外の無料の列です。
ゼロに近い場合は、RAMが不足しており、それに応じて動作するはずです。
負荷平均がかなり高い(68、すごい)ことに注目してください。 CPUを少し消費する多くのプロセスがあり、合計するとすべてのCPU時間を消費する可能性はありますか?おそらく、これらのプロセスは非常に速く開始および終了するだけなので、topはそれらの存在をキャプチャできません。
試す
iotop
ほとんどの場合、IOはそれでした。
Nfs上のロックされたファイル、または別のプロセスがアクセスする必要のあるファイルをロックするその他のもの
アクティブなスレッドが多すぎると、設定されたサービスを見逃す可能性もあります
使ってみてください:
top -o cpu
-o
フラグは、CPU使用率の高い順にプロセスをtopに順序付けさせます。
CPU使用率はスレッドから発生しているようです。 top
はこれを考慮していないようです。私は最近これをmysqlサーバーで見ました。実行中のINSERTステートメントがありますが、mysqldのいくつかのスレッドがテーブルインデックスを更新していたため、SELECTで新しい行を取得できませんでした。 topは1つのコアで100%のユーザー負荷を示していますが、mysqldを含むすべてのプロセスは0.0%のCPUでした。数時間後、同じSELECTが予期した結果セットを提供しました。
こちらもご覧ください