我以为按正常运行时间计算的平均负载和 top(#9 列)中所有正在运行的进程的 %CPU 总和应该一致。但这似乎不正确。以下是我的一些小实验:
在一台服务器上:
$ top -b -n 1| awk '{ totuse = totuse + $9 } END { print totuse/100 }'; uptime
6.29
22:00:59 up 28 days, 7:03, 9 users, load average: 7.03, 5.81, 4.51`
在另一台服务器上:
$ top -b -n 1| awk '{ totuse = totuse + $9 } END { print totuse/100 }'; uptime
4.93
22:01:37 up 29 days, 8:27, 17 users, load average: 18.83, 16.01, 13.86`
那么为什么两者会有如此大的差异呢?哪一个更真实地反映CPU的使用率?
如果我尝试评估正在运行的进程使用了多少 CPU,这是一个好方法吗:
top -b -n 1 | grep "tim"| awk '{ totuse = totuse + $9 } END { print totuse/100 }'
?
感谢致敬!
答案1
CPU % 和平均负载不一致的原因是它们是两个完全不同的值。CPU % 就是进程使用的 CPU 百分比。平均负载是 1、5 和 15 分钟内运行队列中进程的加权平均值。
如果您关心自己使用了多少 CPU(是否充分利用了 CPU),统计 top 的输出会很有用。您可以偶尔运行它并记录值(或使用sar
,它会为您完成此操作)。
平均负载高意味着运行队列中有很多进程 - 许多进程已准备就绪并等待运行。高负载并不一定意味着 CPU 使用率高。
维基百科有一篇很好的文章描述了平均负载以及 CPU 负载和 CPU 使用率之间的区别: http://en.wikipedia.org/wiki/Load_Average