毎回同じCPU使用率を取得します。

毎回同じCPU使用率を取得します。

CPU使用率を取得するために次のコマンドを実行すると、罰金+ユーザーCPU使用率が表示されます。

top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}' 

出力:

14.5

ここで私が経験している問題は、出力がtopコマンドに依存するため、topコマンドのようにすぐには変更されないことです。だから、右のCPUを取得できません。同じ出力を提供し、変更されません。

出力からリアルタイムCPU使用率を取得したい。私の指揮能力を向上させるのに役立ちます。

答え1

あなたは正しいです。top最初の繰り返しでは、CPU使用率が間違っているようです。この問題は次のように解決できます。

top -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2 + $4}'

もちろん時間は2倍かかりますが、関係なく動作します。

それでも高速に機能するには、-dオプションを使用できます。たとえば、合計測定期間が1秒の場合は半分を使用します。

top -d 0.5 -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2 + $4}'

答え2

技術的には、最初の値はtop常に同じ値を出力せず、最後の起動以降の平均CPU負荷のみを出力します。top統計の増加はCPU負荷を計算するために使用されるため、0/proc/statと比較すると最初の値が計算され、誤った(WAD)結果が生成されます。

使用したくない場合は、top直接解析できます/proc/stat

cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5) "%"}'

この方法はまた、高速かつ正確です。

次のコマンドを使用してテストできますstress

stress -c 1 -q &

そして

killall stress

後ろに。

答え3

@Ruslanの回答を拡張してtopCPU使用率をユーザー、システムプロセス、niceプロセスに分割するには、3つの合計が必要です。したがって、出力を解析できるキャッチモードtopで実行できます。bしかし、説明したようにここ、最初の反復は開始後のパーセンテージを返すため、現在のパーセンテージを取得するにはtop -b少なくとも2回の反復()が必要です。-n 2作業速度を上げるには、繰り返し間のd遅延を次のように設定できます0.01

top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'

答え4

watch コマンドを使用するか、シェルで for ループを使用します。

つまりwatch -n1 "top -b -n1 | grep 'Cpu(s)' | awk '{print \$2 + \$4}'"

関連情報