`mpstat` 有时显示 CPU 使用率超过 100%

`mpstat` 有时显示 CPU 使用率超过 100%

在我们的其中一台服务器上运行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%

相关内容