我理解这一点,top
并htop
实时提供了很多有关服务器状态的信息。但是什么真正给了我服务器的总 CPU 信息?我可以依赖命令中的 id 列吗top
:
%Cpu(s): 1.9 us, 0.7 sy, 0.0 ni, 92.2 id, 5.2 wa, 0.0 hi, 0.1 si, 0.0 st
例如,从上面的例子可以看出,总 CPU 使用率是 100% 中的 92.2% 吗?我们可以使用以下命令:
(top -b -n2 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' -v prefix="$prefix" '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.1f%%\n", prefix, 100 - v }')
或通过此链接总体 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)
或者:
top -bn1 | grep "Cpu(s)" | \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
awk '{print 100 - $1"%"}'
或者:
mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { print 100 - $field }'
另外,我们不想传递的理想值是什么?