Linux CPU 使用率显示不正确

Linux CPU 使用率显示不正确

我熟悉顶部的工作原理。各个进程是相对于1个vcpu的,汇总是相对于所有vcpu的。

我有一个进程进行了大量的睡眠,我试图了解它对服务器的真正影响。

在顶部,我有:

%Cpu(s):  1.4 us,  1.8 sy,  0.0 ni, 96.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                                                                 
  38772 root      20   0   62140  15480  12108 R   7.6   1.5   0:15.15 php     

我只在 /proc/cpuinfo 中列出了 1 个 CPU(以及在 /sys/devices/system/cpu/ 中)

如果这一进程使用了​​ 7.6% 的 CPU,那么服务器怎么会空闲 96.8%呢?这不是一次性误报,顶部进程的 CPU 使用率始终是顶部报告的整个服务器使用率的 2-3 倍。

我假设 top 是从 /proc/stat 和 /proc/pid/stat 中提取的

所以考虑到这一点...

当该进程在服务器上运行时,我检查了这两个虚拟文件:

第一次检查

/进程/统计

cpu  1970483 7927 2795587 10758959 2446 0 7301 631701 0 0

/proc/38772/stat

38772 (php) S 36827 38772 36827 34816 38772 1077936128 1251 0 0 0 2809 1819

第二次检查

/进程/统计

cpu  1970572 7927 2795638 10763502 2446 0 7301 632255 0 0

/proc/38772/stat

38772 (php) S 36827 38772 36827 34816 38772 1077936128 1251 0 0 0 3098 1986

做数学...

所以,对于这个过程,我认为计算就是这样的:

3098 - 2809 = 289
1986 - 1819 = 167

对于服务器来说,应该是这样的:

1970572 - 1970483 = 89
1970572 - 1970483 = 51

...所以在我看来,top 和 /proc 都同意,不知何故,这个进程使用的 CPU 比整个服务器还要多。这怎么可能?我应该假设哪种计算更准确?

我正在运行最新的 Ubuntu 20.04 版本 (5.4.0-88-generic)

答案1

如果这一进程使用了​​ 7.6% 的 CPU,那么服务器怎么会空闲 96.8%呢?

如果您只有一个 CPU,那么它一次只能运行一个执行线程。因此,当输出写入屏幕时,唯一使用 CPU 的就是写入屏幕。而且它使用的是当时的所有CPU。您在此处看到的值是一段时间内的平均值 - 比标题利用率数据更长的时间内每个进程的 CPU 使用率。

相关内容