例如,我想知道如何使用bash获取系统CPU使用情况并以百分比表示。
样例输出:
57%
如果有多个核心,如果能计算出平均百分比就好了。
例如,我想知道如何使用bash获取系统CPU使用情况并以百分比表示。
样例输出:
57%
如果有多个核心,如果能计算出平均百分比就好了。
当前回答
看一下cat /proc/stat
使用grep的cpu /proc/stat | awk的{=(2 + 4美元)* 100 /(2 + 4 + 5美元美元)}{打印使用“%”}终结”
编辑请阅读评论,然后复制粘贴或使用此任何严肃的工作。这是一个没有测试和使用,它是一个想法的人谁不想安装一个实用程序或任何发行版的工作。有些人认为你可以“apt-get - install”任何东西。
注意:这不是当前的CPU使用率,而是系统启动以来所有核心的CPU使用率。这可能与当前的CPU使用情况有很大不同。要获得当前值,必须使用top(或类似的工具)。
可以通过以下方法计算当前CPU使用情况:
awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else print ($2+$4-u1) * 100 / (t-t1) "%"; }' \
<(grep 'cpu ' /proc/stat) <(sleep 1;grep 'cpu ' /proc/stat)
其他回答
不妨用我的解决方案给出一个实际的回应,我的解决方案受到了彼得·利延伯格的启发:
$ mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12"%" }'
0.75%
这将使用awk打印出100减去第12个字段(空闲),后面有一个百分比符号。Awk只对第12个字段只有数字和点的行($12 ~ /[0-9]+/)执行此操作。
你也可以平均5个样本,间隔1秒:
$ mpstat 1 5 | awk 'END{print 100-$NF"%"}'
像这样测试它:
$ mpstat 1 5 | tee /dev/tty | awk 'END{print 100-$NF"%"}'
你可以试试:
top -bn1 | grep "Cpu(s)" | \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
awk '{print 100 - $1"%"}'
编辑:我注意到在另一个用户的回复中%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) }'
看一下cat /proc/stat
使用grep的cpu /proc/stat | awk的{=(2 + 4美元)* 100 /(2 + 4 + 5美元美元)}{打印使用“%”}终结”
编辑请阅读评论,然后复制粘贴或使用此任何严肃的工作。这是一个没有测试和使用,它是一个想法的人谁不想安装一个实用程序或任何发行版的工作。有些人认为你可以“apt-get - install”任何东西。
注意:这不是当前的CPU使用率,而是系统启动以来所有核心的CPU使用率。这可能与当前的CPU使用情况有很大不同。要获得当前值,必须使用top(或类似的工具)。
可以通过以下方法计算当前CPU使用情况:
awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else print ($2+$4-u1) * 100 / (t-t1) "%"; }' \
<(grep 'cpu ' /proc/stat) <(sleep 1;grep 'cpu ' /proc/stat)
尝试sysstat包中的mpstat
> 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
然后一些cutor grepto解析你需要的信息:
mpstat | grep -A 5 "%idle" | tail -n 1 | awk -F " " '{print 100 - $ 12}'a