在我们的其中一台服务器上运行mpstat -P ALL
会返回以下内容:
06:48:02 AM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
06:48:02 AM all 15.61 0.08 84.09 7.20 0.56 0.01 0.00 13.97 763.27
06:48:02 AM 0 12.40 0.07 82.12 8.26 0.41 0.01 0.00 13.21 341.40
06:48:02 AM 1 18.82 0.04 86.06 6.15 0.72 0.01 0.00 14.73 421.87
因此,总 CPU 使用率是通过每行的总和来衡量的百分比:
全部 - 122.52%
CPU1 - 116.48%
CPU2 - 126.53%
我是不是误解了 mpstat 的工作原理?我以为总数应该总是等于 100%?
如果相关的话,服务器是 RHEL 5.5。CPU 是 Intel Xeon Dual Core L3406 2.26Ghz
答案1
来自 mpstat 手册页:
间隔参数指定每次报告之间的时间间隔(以秒为单位)。值为 0(或根本没有参数)表示要报告自系统启动(引导)以来的处理器统计信息
运行 mpstat 一次只能为您提供对数期使用情况的估计。使用间隔参数运行 mpstat 可以为您提供更精确的数字。
这种差异是舍入误差的累积,会随着系统活动和正常运行时间而增长。显示的实际统计数据是从 和 收集的/proc/stat
。/proc/uptime
统计数据以 USER_HZ 计数(通常为 100Hz,getconf CLK_TCK
将确认这一点),因此您的分辨率仅为 1/100 秒;而 CPU 在 0.01 秒内完成了很多工作。
举个例子:
$ cat /proc/stat; cat /proc/uptime
cpu 414821 51578 226720 66535103 73932 0 4548 0 0 0
cpu0 205014 22950 114302 33188492 36369 0 2071 0 0 0
cpu1 209807 28628 112418 33346611 37563 0 2477 0 0 0
<...>
335694.91 665351.03
在我的工作站上(这台工作站才运行了几天)我们得到了上述数字。如果我们计算 CPU 统计的总时间占正常运行时间的百分比,我们会得到
(414821 + 51578 + 226720 + 66535103 + 73932 + 4548) / 335694.91 / 2
100.25%
ps
手册页中还有关于进程统计的(不太有用的)注释。
目前,CPU 使用率以进程整个生命周期中运行时间的百分比来表示。这并不理想,也不符合 ps 所遵循的标准。CPU 使用率不太可能加起来正好是 100%