实时获取CPU使用率
当我执行以下命令来获得cpu使用时,我得到了很好的+用户cpu使用率。
top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'
输出:
14.5
这里我遇到的问题是输出依赖于top命令,因此它不会立即作为top命令改变。 所以我没有立即得到正确的CPU。 它提供相同的输出而不会改变。
我想在输出中获得实时cpu使用率。 请帮我改进命令。
如果您能够承受一秒的延迟,这将打印CPU使用率作为一个简单的百分比:
echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]
(没有一秒钟的延迟, vmstat
只能打印自启动后的平均值。)
这是top
的已知问题。 正如这里所解释的那样, top -b
的第一次迭代返回自启动以来的百分比,因此我们需要至少两次迭代( -n 2
)来获得当前百分比。 为了加快速度,您可以将迭代之间的设置设置为0.01
。 top
分割用户,系统进程和nice
进程之间的CPU使用情况,我们想要三者的总和。 最后,你grep
包含CPU百分比的行,然后使用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
我尝试了几种方法,但在我看来这是最准确的:
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)}'
从这里得到它
使用-n2
。 这将输出两行。 第一次打印top
线不符合该时间点的状态。 然后调整脚本以忽略第一行。