我在几个4核心服务器上运行了一个非常繁重的数字运算,所有运行Ubuntu Precise Pangolin LTS 64位,在云端(所以我想在虚拟化环境中).
为了监控cpu的使用情况,我编写了一个.sh,它使用“top -b -n 1”(这是一个top运行,只有第一个“frame”)并将它与其他一些数据合并,写一个小报告.
但是,对于每台服务器,top总是在cpus线上报告64%空闲,即使我非常确定所有四个核心都是100%忙碌.
实际上,以交互方式运行顶部,在第一帧中它报告64%的空闲时间,但是一旦刷新它就会报告正确的(几乎0%空闲)数据.
vmstat,在cpu列中,总是在第一行报告64%的空闲时间,然后开始报告(据称)实际数据.
为什么?它是top / vmstat或内核中的错误吗?或者它是如何测量cpu%的已知副作用?为什么总是64%?
cpu load总是正确的(大约4).
解决方法
这是因为top,vmstat,iostat在他们的第一次运行中都收集了自系统上次重启时间以来的数据.
连续迭代在您指定的采样周期上运行.因此,在第一次运行顶部时,您将看到%空闲时间,因为从重新启动到运行顶部的时间,它是空闲的%.但是在下一次迭代中,由于它很忙,它不会显示任何%空闲.
排除第一次迭代并尝试在所需的时间间隔内进行采样.