CPU使用率をリアルタイムで取得する

CPU使用率をリアルタイムで取得する

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 2d0.01topnicegrepgawk

    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 を変更してください。

関連情報