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


11

次のコマンドを実行してCPU使用率を取得すると、nice + user cpu usageが表示されます。

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

出力:

14.5

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

出力でリアルタイムのCPU使用率を取得したい。コマンドを改善するのを手伝ってください。



この単純なbashスクリプトは、まさにそれを行います。askubuntu.com
クレイグ

回答:


19

1秒の遅延を許容できる場合、これはCPU使用率を単純な割合で出力します。

echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]

(1秒の遅延なしで、vmstatブート後の平均値のみを印刷できます。)


(ホテルトップとの比較)私に正確な%を与えるものではありません
レペ

1
次のvmstat 1 2ように使用する必要がありecho $[100-$(vmstat 1 2|tail -1|awk '{print $15}')] ます。 それ以外の場合vmstat、ブート後に値を指定することになりますがこれは目的の値ではない可能性があります。
ジョー

ジョーありがとうございます。ポール、答えを編集して、誰もが正しいコマンドラインを表示できるようにしてください
パブロスセオドアー

それをキャッチしてくれてありがとう、ジョーとパブロス!私はマニュアルページのその部分に気付きませんでした。
ポール

9

これはの既知の問題topです。ここで説明したように、最初の反復でtop -bはブート以降のパーセンテージが返さ-n 2れるため、現在のパーセンテージを取得するには少なくとも2回の反復()が必要です。速度を上げるために、d反復間の遅延をに設定できます0.01topCPU使用率をユーザー、システムプロセス、niceプロセスに分割します。3つの合計が必要です。最後に、grepCPUパーセンテージを含む行を使用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

このコマンドは常に50%を示しますが、sar、mpstat ...などの他のすべてのメソッドは2/3%を示します。
CMCDragonkai 14

@CMCDragonkai数字を変更する必要があります(チェックしたばかりです)正しくコピー/貼り付けしてよろしいですか?また、複数のCPUを搭載したシステムでtopは、使用率(%)が単一 CPUの割合として報告されることに注意してください。これは、多くの場合、より高いパーセンテージを取得することを意味します。ここのポイント9を参照してください。
テルドン14

このコマンドは私のシステムと互換性がないかもしれません。しかし、私が試した他のすべての方法では、1/2/3%の割合が得られることは明らかです。これは、htopを実行した場合に見られるものですが、このコマンドは異常を示します。
CMCDragonkai 14

@CMCDragonkaiは、複数のCPUが原因です。これによって返される数値を取得してコアの数で除算するかtop、対話モードで使用して(単に実行top)、そこでヒットI(Shift + i)してコアごとの内訳を確認できます。
テルドン14

CPUは1つしかありません。
CMCDragonkai 14

7

私はいくつかの方法を試しましたが、これは私にとって最も正確なようです:

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)}'

ここから手に入れ


私のLinux(Linux machine_name 4.4.0-127-generic#153-Ubuntu SMP 5月19日10:58:46 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux)には列$ 15(/ proc / statファイルのcpu行)がありません:CPU 17411187 27478 594887 646652526 585551 0 31838 0 0 0
ケミン周

1
ベストアンサー!ありがとう!私のバリエーション:cat <(grep 'cpu' / proc / stat)<(sleep 0.1 && grep 'cpu' / proc / stat)| awk -v RS = "" '{printf "%.1f"、($ 13- $ 2 + $ 15- $ 4)* 100 /($ 13- $ 2 + $ 15- $ 4 + $ 16- $ 5)}'
maXp

maXpの違いは、その%.1f出力が他のスクリプトでその出力を使用する場合、単一の小数で丸められることです。
lepe

0

を使用し-n2ます。これにより、2行が出力されます。1回目topは、その時点での状態に該当しない行を出力します。次に、最初の行を無視するようにスクリプトを調整します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.