6

top -b -n 1を実行すると、コマンドは常に同じCPU値を返します。次のテストを5回続けて実行することを検討してください。

[user@server ~]$ top -b -n 5 -d.2 | grep "Cpu(s)"
Cpu(s): 18.5%us, 10.0%sy,  0.0%ni, 67.0%id,  4.2%wa,  0.0%hi,  0.2%si,  0.1%st
Cpu(s): 39.8%us, 27.7%sy,  0.0%ni, 31.3%id,  0.0%wa,  0.0%hi,  1.2%si,  0.0%st
Cpu(s): 39.0%us, 35.4%sy,  0.0%ni, 23.2%id,  0.0%wa,  0.0%hi,  1.2%si,  1.2%st
Cpu(s): 41.2%us, 34.1%sy,  0.0%ni, 15.3%id,  1.2%wa,  0.0%hi,  2.4%si,  5.9%st
Cpu(s): 59.0%us, 30.1%sy,  0.0%ni,  4.8%id,  0.0%wa,  0.0%hi,  3.6%si,  2.4%st
[user@server ~]$ top -b -n 5 -d.2 | grep "Cpu(s)"
Cpu(s): 18.5%us, 10.0%sy,  0.0%ni, 67.0%id,  4.2%wa,  0.0%hi,  0.2%si,  0.1%st
Cpu(s): 18.9%us, 17.8%sy,  0.0%ni, 63.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu(s): 18.8%us, 21.2%sy,  0.0%ni, 55.3%id,  2.4%wa,  0.0%hi,  1.2%si,  1.2%st
Cpu(s): 29.4%us, 24.7%sy,  0.0%ni, 45.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu(s): 60.5%us, 24.4%sy,  0.0%ni, 11.6%id,  1.2%wa,  0.0%hi,  1.2%si,  1.2%st
[user@server ~]$ top -b -n 5 -d.2 | grep "Cpu(s)"
Cpu(s): 18.5%us, 10.0%sy,  0.0%ni, 67.0%id,  4.2%wa,  0.0%hi,  0.2%si,  0.1%st
Cpu(s): 43.4%us, 38.6%sy,  0.0%ni, 15.7%id,  0.0%wa,  0.0%hi,  1.2%si,  1.2%st
Cpu(s): 55.3%us, 40.0%sy,  0.0%ni,  4.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu(s): 39.5%us, 48.8%sy,  0.0%ni,  5.8%id,  1.2%wa,  0.0%hi,  1.2%si,  3.5%st
Cpu(s): 40.7%us, 55.6%sy,  0.0%ni,  2.5%id,  0.0%wa,  0.0%hi,  0.0%si,  1.2%st
[user@server ~]$ top -b -n 5 -d.2 | grep "Cpu(s)"
Cpu(s): 18.5%us, 10.0%sy,  0.0%ni, 67.0%id,  4.2%wa,  0.0%hi,  0.2%si,  0.1%st
Cpu(s): 27.1%us, 10.6%sy,  0.0%ni, 61.2%id,  1.2%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu(s): 25.3%us,  5.7%sy,  0.0%ni, 67.8%id,  0.0%wa,  0.0%hi,  0.0%si,  1.1%st
Cpu(s): 15.5%us, 16.7%sy,  0.0%ni, 64.3%id,  0.0%wa,  0.0%hi,  0.0%si,  3.6%st
Cpu(s): 57.3%us, 11.2%sy,  0.0%ni, 30.3%id,  0.0%wa,  0.0%hi,  0.0%si,  1.1%st
[user@server ~]$ top -b -n 5 -d.2 | grep "Cpu(s)"
Cpu(s): 18.5%us, 10.0%sy,  0.0%ni, 67.0%id,  4.2%wa,  0.0%hi,  0.2%si,  0.1%st
Cpu(s): 44.0%us,  6.0%sy,  0.0%ni, 42.9%id,  0.0%wa,  0.0%hi,  3.6%si,  3.6%st
Cpu(s): 45.8%us,  9.6%sy,  0.0%ni, 44.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu(s): 34.5%us,  8.3%sy,  0.0%ni, 57.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu(s): 38.6%us, 14.5%sy,  0.0%ni, 45.8%id,  0.0%wa,  0.0%hi,  0.0%si,  1.2%st

ここで問題になる可能性があるアイデアはありますか?

4

5 に答える 5

8

誰かが1行を探している場合は、CPUの値を取得してからこれを試してください

top -b -n 5 -d.2 | grep "Cpu" | tail -n1 | awk '{print($2)}' | cut -d'%' -f 1

于 2012-02-08T04:25:54.313 に答える
7

CPU使用率の数値は、時間間隔の平均として計算されます。最初の反復では、その時間間隔は「システムの起動から現在まで」です。以降の反復では、時間間隔は「最後の反復から現在まで」です。

于 2011-02-09T03:18:42.767 に答える
5

Topは、開始前にプロセス時間のカウントが何であったかを知らないため、負荷平均や待機中のスレッドなどのさまざまな要因に基づいて、最初のパスで推測を行います。

トップをインタラクティブに開始し、それが返す結果の最初のバッチをすばやく調べると、同じ効果を確認できます。

簡単な解決策:top -b -n 5 -d.2 | grep "Cpu(s)" | tail -n+2

于 2011-02-09T01:06:47.957 に答える
3

私もこの問題に遭遇し、いくつか掘り下げました。

'man top'を実行し、waaayを下にスクロールすると、セクション7から次のことがわかります。。。

topコマンドは、サンプル間のCPU時間値の変化を調べることによってCpu(s)を計算します。最初に実行したときは、比較する前のサンプルがないため、これらの初期値は起動後のパーセンテージです。これは、少なくとも2つのループが必要であるか、最初のループからの要約出力を無視する必要があることを意味します。これは、たとえばバッチモードの場合に問題になります。CPULOOP = 1環境変数を定義すると、回避策が考えられます。topコマンドは、標準出力の前に、CPUデータに対して1つの追加の隠しループを実行します。

お役に立てれば!

于 2013-02-18T02:50:49.500 に答える
2

これは、上位のすべてのプロセスの合計CPU使用率を計算する例です。値を滑らかにするために、-dフラグを使用してデフォルトの間隔を増やします。ヘッダーはLinuxディストリビューションに固有である可能性があるため、tailを使用しません。

top -b -d 5 -n 2 | awk '$1 == "PID" {block_num++; next} block_num == 2 {sum += $9;} END {print sum}'
于 2015-07-23T11:04:50.510 に答える