实时获取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.01top分割用户,系统进程和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线不符合该时间点的状态。 然后调整脚本以忽略第一行。