“mpstat”有时会显示100%以上的CPU使用率

在我们的一台服务器上运行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双核L3406 2.26Ghz

从mpstat手册页:

interval参数指定每个报告之间的时间(以秒为单位)。 值为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%