平均负载和总 CPU 百分比

平均负载和总 CPU 百分比

我以为按正常运行时间计算的平均负载和 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

相关内容