web-dev-qa-db-ja.com

トップは、最初の画面またはバッチ実行で64%のアイドル状態を示していますが、アイドル時間はまったくありません

私は、クラウドでUbuntu Precise Pangolin LTS 64ビットを実行しているいくつかの4コアサーバーで非常に多くの処理を実行しています(仮想化環境であると思います)。

CPU使用率を監視するために、「top -b -n 1」(つまり、topの1回の実行、最初の「フレーム」のみ)を使用し、それを他のデータとマージして小さなレポートを作成する.shを作成しました。 。

ただし、4つのコアすべてが100%ビジーであると確信していても、topは常にCPUラインで64%がアイドル状態であると報告しました。

実際、topをインタラクティブに実行すると、最初のフレームで64%のアイドル時間が報告されますが、更新するとすぐに正しい(ほぼ0%のアイドル)データが報告されます。

vmstatも、cpu列で、常に最初の行で64%のアイドル時間を報告し、次に(おそらく)実際のデータの報告を開始します。

それはなぜです? top/vmstatまたはカーネルのバグですか?それとも、CPU%の測定方法の既知の副作用ですか?なぜ常に64%なのですか?

代わりに、CPU負荷は常に正しいです(約4)。

3
Simone Gianni

これは、最初の実行でtop、vmstat、iostatがすべて、システムの最後の再起動時刻以降にデータを収集するためです。

そして、連続する反復は、指定したサンプリング期間で実行されます。したがって、topの最初の実行では、%idle時間が表示されます。これは、再起動からtopを実行するまで、%アイドル状態であったためです。ただし、次の反復では、ビジーであるため、%idleは表示されません。

最初の反復を除外し、必要な間隔でサンプリングしてみてください。

4

これを行うには、「Cpu(s)」で始まる行をgreppingし、結果をtailにパイプします。

top -b -n2 -d 0.1 |grep "Cpu(s)"|tail -n +1

tail -n +1最初の行(悪い結果)を破棄し、2番目の行のみを通過させます。 -d 0.1は、topの最初の反復と2番目の反復の間の10分の1秒の遅延を意味します。 -b -n2は、バッチモードで2回実行することを意味します。これの最終出力は、レポートで使用できる「良好な」結果を含む1行です。

「CPU」行以外の行が必要な場合は、すすぎ、それぞれについて繰り返します。

2
Benjamin Staton