Linux CPU使用率不总和为100%

3
每当我尝试计算类似于topmpstat以及特别是collectd服务的CPU利用率百分比时,我无法得到确切的100% CPU利用率。
例如,在Amazon EC2上的测试服务器中,top结果如下:
Cpu(s): 13.6%us, 31.6%sy,  0.0%ni, 53.2%id,  0.0%wa,  0.0%hi,  0.0%si,  1.7%st

无论如何计算百分比,我似乎从未真正达到100%的CPU占用率,通常看起来像是舍入误差; 100.1%或99.9%,但有时我会得到超过110%的结果。这通常发生在steal相对较高的情况下,例如collectd中报告的一种情况为~21.44%的steal和~88%的空闲时间,仅这两个指标就已经超过100%了。我知道ni(nice)也被计入us(用户),因此我不应该将其相加,但这仍然无法解决问题。
有人知道如何将这些总和加起来达到100%,或者如何解释collectd有时报告的异常情况吗?

top 不是准确地报告 CPU 使用率,而是指示运行所有进程所需的单个 CPU 的使用量。您可以拥有大于 100% 的使用率。请参阅以下线程:http://superuser.com/questions/174660/why-is-the-cpu-usage-reported-by-top-in-linux-over-100 和 http://serverfault.com/questions/127059/using-top-4-processes-have-100-cpu-how - wkl
@birryree,你当然是对的。如果你有两个核心,在top中总CPU%可能会达到200%。我忘了提到这个VPS只有一个核心。但在collectd中,统计数据会按照每个单独的核心进行拆分。 - Martijn
2个回答

5
< p > collectd (以及 top htop vmstat 或任何其他类似实用程序)报告一个间隔的平均值。由于内核(从中这些实用程序查询其统计信息)不通常使用浮点数运算,并且不一定尽力详细说明所有内容,因此无法100%准确。有时它们的总和将小于100%,有时则大于100%。它并不打算用于审计,只是一般指示时间花在哪里。< / p >

1
我确认这与collectd无关,而与内核记账有关。这种不准确性在无滴答系统和/或调节状态下特别显著。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接