top 和 /proc/stat 中 CPU 使用率的差异

top 和 /proc/stat 中 CPU 使用率的差异

我正在尝试编写一个小脚本,除其他外,通过读取来计算CPU使用率/proc/stat,但我似乎无法获得一致的结果。我基本上是在做一个

grep cpu /proc/stat

然后处理应该累积所有线程数据的第一行。就我而言,我有 4 个核心/8 个线程。我还编写了一个程序,它不断占用一个线程只是为了测试东西(它基本上是一个while(1) { 1 })。在这种情况下,如果我什么都不做,我预计 cpu 使用率为 12.5%,如果我运行top,我会得到:

%Cpu(s): 12,7 usuario,  0,1 sist,  0,0 adecuado, 87,1 inact,  0,1 en espera,  0,

(抱歉,它是另一种语言)。不过,第一行/proc/stat如下:

cpu  1490042 169968 416799 32056116 21179 0 19504 0 0 0

如果我从这里计算百分比:

(1490042 + 169968 + 416799)/(1490042 + 169968 + 416799 + 32056116) = 6%

为什么不一致?我想我没有/proc/stat正确解释?

答案1

我必须回答我的问题,因为找到答案并不那么难,我只是误读了文档/proc/stat

/proc/stat显示自启动以来的聚合数据,因此要计算给定时间间隔内的平均 CPU 使用率,您必须计算/proc/stat该时间间隔开始和结束时给出的值的差异。

相关内容