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の回答を拡張してtop
CPU使用率をユーザー、システムプロセス、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}'"