web-dev-qa-db-ja.com

Linux上で全体的なCPU使用率(例えば57%)を取得する方法

たとえば、bashを使用して、システムのCPU使用率を取得し、それをパーセントで表示する方法を考えています。

出力例:

57%

複数のコアがある場合、平均パーセンテージが計算できればいいでしょう。

167
user1199739

cat /proc/statを見てください

grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'

EDITこれをコピー&ペーストする前、またはこれを深刻な作業に使用する前に、コメントをお読みください。これはテストも使用もされていません。ユーティリティをインストールしたくない人や、どんなディストリビューションでも動作するような人のためのアイデアです。何でも "apt-get install"できると思う人もいます。

146
vimdude

あなたが試すことができます:

top -bn1 | grep "Cpu(s)" | \
           sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
           awk '{print 100 - $1"%"}'
94
netcoder

mpstatパッケージからsysstatを試してください。

> Sudo apt-get install sysstat
Linux 3.0.0-13-generic (ws025)  02/10/2012  _x86_64_    (2 CPU)  

03:33:26 PM  CPU    %usr   %Nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
03:33:26 PM  all    2.39    0.04    0.19    0.34    0.00    0.01    0.00    0.00   97.03

それからcutgrepが必要な情報をパースします。

mpstat | grep -A 5 "%idle" | tail -n 1 | awk -F " " '{print 100 -  $ 12}'a
37
Peter Svensson

Peter Liljenbergの次のことに触発された私の解決策で実際の応答を投げたのかもしれません。

$ mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12"%" }'
0.75%

これはawkを使用して100から12番目のフィールド(アイドル)をプリントし、その後にパーセント記号を付けます。 awkは、12番目のフィールドに数字とドットだけがある行に対してのみこれを行います($12 ~ /[0-9]+/)。

20
Dan Fego

編集済み:私は、他のユーザの回答では、アイドル率がフィールド11ではなくフィールド12であったことに気づきました。awkは、アイドル率フィールドが可変であることを考慮して更新されました。

これはあなたに望ましい出力を得るはずです:

mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { print 100 - $field }'

単純な整数丸めが必要な場合は、printfを使用できます。

mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { printf("%d%%",100 - $field) }'
13
jordanm