
CPU 使用率を取得するために次のコマンドを実行すると、nice + ユーザーの CPU 使用率が得られます。
top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'
出力:
14.5
ここで問題になるのは、出力が top コマンドに依存しているため、top コマンドのように即座に変更されないことです。そのため、正しい CPU を即座に取得できません。出力は同じで、変更されません。
リアルタイムの CPU 使用率を出力で取得したいです。コマンドの改善にご協力ください。
答え1
1 秒の遅延を許容できる場合は、次のように CPU 使用率が単純なパーセンテージとして出力されます。
echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]
(1秒の遅延がなければ、vmstat
起動以降の平均値のみを印刷できます。
答え2
これは既知の問題ですtop
。説明したようにここ、 の最初の反復は起動以来のパーセンテージを返すので、現在のパーセンテージを取得するにはtop -b
少なくとも 2 回の反復 ( ) が必要です。処理を高速化するには、反復間の遅延を に設定できます。は、CPU 使用率をユーザー、システム プロセス、プロセスに分割し、3 つの合計を求めます。最後に、CPU パーセンテージを含む行を取得し、 を使用してユーザー、システム、nice プロセスを合計します。-n 2
d
0.01
top
nice
grep
gawk
top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
----- ------ ----------- --------- ----------------------
| | | | |------> add the values
| | | |--> keep only the 2nd iteration
| | |----------------> keep only the CPU use lines
| |----------------------------> set the delay between runs
|-----------------------------------> run twice in batch mode
答え3
いくつかの方法を試しましたが、これが最も正確であるように思われます。
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)}'
入手先ここ
答え4
コアごとの CPU 使用率が必要だったので、sysstat パッケージの mpstat を使用しました。
sudo apt install sysstat
CPU0 使用率 (%):
echo 100 - $(mpstat -P 0 | tail -1 | awk '{print $13}') | bc
CPU1 使用率 (%):
echo 100 - $(mpstat -P 1 | tail -1 | awk '{print $13}') | bc
コアが 2 つ以上ある場合は -PX を変更してください。