我想知道如何使用bash获取系统CPU使用率并以百分比形式显示它。
样本输出:
57%
如果有一个以上的核心,如果可以计算平均百分比,那就太好了。
看看cat /proc/stat
grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'
编辑请在复制粘贴之前阅读评论或将其用于任何认真的工作。这个没有经过测试也没有使用,对于那些不想安装实用程序的人或任何在任何发行版中工作的人来说都是一个想法。有些人认为你可以“apt-get install”任何东西。
注意:这不是当前的CPU使用率,而是自系统启动以来所有核心的总体CPU使用率。这可能与当前的CPU使用率有很大不同。必须使用当前值(或类似工具)。
你可以试试:
top -bn1 | grep "Cpu(s)" | \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
awk '{print 100 - $1"%"}'
试试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
然后一些cut
or grep
to解析您需要的信息:
mpstat | grep -A 5 "%idle" | tail -n 1 | awk -F " " '{print 100 - $ 12}'a
不妨用我的解决方案提出实际的回应,这是受Peter Liljenberg的启发:
$ mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12"%" }'
0.75%
这将使用awk
打印出100减去第12个字段(空闲),后面有一个百分号。 awk
只会在第12个字段只有数字和点($12 ~ /[0-9]+/
)的行中执行此操作。
编辑:我注意到在另一个用户的回复中,%idle是字段12而不是字段11.已更新awk以说明%idle字段是可变的。
这应该可以获得所需的输出:
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) }'