为什么“mpstat”和“pidstat”对 CPU 负载水平的看法可能不一致?

为什么“mpstat”和“pidstat”对 CPU 负载水平的看法可能不一致?

mpstat我正在同时使用和 来监控 ubuntu 12.04 中的 mysql 进程pidstat。在调试其 CPU 使用率时,我注意到了一些异常。虽然这两个工具都同意 CPU 负载正在发生,但它们不同意关于负载类型。以下是示例时间片:

$ pidstat -p 2763 1
01:36:36 PM       PID    %usr %system  %guest    %CPU   CPU  Command
01:36:36 PM      2763    0.00    0.00    0.00    0.00     0  mysqld
01:36:37 PM      2763    0.00    1.00    0.00    1.00     0  mysqld
01:36:38 PM      2763    0.00    5.00    0.00    5.00     0  mysqld
01:36:39 PM      2763    0.00   11.00    0.00   11.00     0  mysqld
01:36:40 PM      2763    0.00   12.00    0.00   12.00     0  mysqld
01:36:41 PM      2763    0.00    0.00    0.00    0.00     0  mysqld
01:36:42 PM      2763    0.00    0.00    0.00    0.00     0  mysqld
01:36:43 PM      2763    0.00    5.00    0.00    5.00     0  mysqld
01:36:44 PM      2763    0.00  170.00    0.00  170.00     0  mysqld
01:36:45 PM      2763    0.00  150.00    0.00  150.00     0  mysqld
01:36:46 PM      2763    0.00    4.00    0.00    4.00     0  mysqld
01:36:47 PM      2763    0.00    7.00    0.00    7.00     0  mysqld
01:36:48 PM      2763    0.00    7.00    0.00    7.00     0  mysqld
01:36:49 PM      2763    0.00   59.00    0.00   59.00     0  mysqld
01:36:50 PM      2763    0.00   85.00    0.00   85.00     0  mysqld

请注意,pidstat报告的是不同时间点的系统级使用率。以下是mpstat大致相同时间段的情况:

$ mpstat -P ALL 1
01:36:37 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:36:38 PM  all    0.38    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.62
01:36:38 PM    0    2.02    0.00    0.00    0.00    0.00    0.00    0.00    0.00   97.98
01:36:38 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:38 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:38 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:38 PM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:38 PM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:38 PM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:38 PM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

01:36:38 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:36:39 PM  all    0.88    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.12
01:36:39 PM    0    4.08    0.00    0.00    0.00    0.00    0.00    0.00    0.00   95.92
01:36:39 PM    1    2.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   98.00
01:36:39 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:39 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:39 PM    4    0.99    0.00    0.99    0.00    0.00    0.00    0.00    0.00   98.02
01:36:39 PM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:39 PM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:39 PM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

01:36:39 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:36:40 PM  all    0.62    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.38
01:36:40 PM    0    5.05    0.00    0.00    0.00    0.00    0.00    0.00    0.00   94.95
01:36:40 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:40 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:40 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:40 PM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:40 PM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:40 PM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:40 PM    7    0.99    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.01

01:36:40 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:36:41 PM  all    1.25    0.00    0.25    0.00    0.00    0.12    0.00    0.00   98.38
01:36:41 PM    0   10.00    0.00    1.00    0.00    0.00    1.00    0.00    0.00   88.00
01:36:41 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:41 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:41 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:41 PM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:41 PM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:41 PM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:41 PM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

01:36:41 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:36:42 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:42 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:42 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:42 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:42 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:42 PM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:42 PM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:42 PM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:42 PM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

01:36:42 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:36:43 PM  all    0.12    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.88
01:36:43 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:43 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:43 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:43 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:43 PM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:43 PM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:43 PM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:43 PM    7    1.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00

01:36:43 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:36:44 PM  all    2.88    0.00    0.00    0.00    0.00    0.00    0.00    0.00   97.12
01:36:44 PM    0   22.77    0.00    0.99    0.00    0.00    0.00    0.00    0.00   76.24
01:36:44 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:44 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:44 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:44 PM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:44 PM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:44 PM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:44 PM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

01:36:44 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:36:45 PM  all   23.72    0.00    0.12    0.00    0.00    0.12    0.00    0.00   76.03
01:36:45 PM    0   99.00    0.00    0.00    0.00    0.00    1.00    0.00    0.00    0.00
01:36:45 PM    1   89.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   11.00
01:36:45 PM    2    1.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00
01:36:45 PM    3    0.00    0.00    0.99    0.00    0.00    0.00    0.00    0.00   99.01
01:36:45 PM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:45 PM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:45 PM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:45 PM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

01:36:45 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:36:46 PM  all   13.89    0.00    0.00    0.00    0.00    0.00    0.13    0.00   85.98
01:36:46 PM    0   34.34    0.00    0.00    0.00    0.00    1.01    0.00    0.00   64.65
01:36:46 PM    1   69.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   31.00
01:36:46 PM    2    5.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   95.00
01:36:46 PM    3    3.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   97.00
01:36:46 PM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:46 PM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:46 PM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:46 PM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

01:36:46 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:36:47 PM  all    0.50    0.00    0.00    0.00    0.00    0.13    0.00    0.00   99.37
01:36:47 PM    0    3.96    0.00    0.00    0.00    0.00    0.00    0.00    0.00   96.04
01:36:47 PM    1    1.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00
01:36:47 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:47 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:47 PM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:47 PM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:47 PM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:47 PM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

01:36:47 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:36:48 PM  all    0.63    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.37
01:36:48 PM    0    5.10    0.00    0.00    0.00    0.00    0.00    0.00    0.00   94.90
01:36:48 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:48 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:48 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:48 PM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:48 PM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:48 PM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:36:48 PM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

我对它们在总体百分比上存在分歧并不感到惊讶,但我搞不明白为什么它们pidstatmpstatCPU 负载类型上存在分歧。mpstat表示负载发生在应用程序级别。pidstat表示负载发生在内核级别。 这是怎么回事? 我假设两者都是视图/proc,但我对它们的内部结构不够了解,不知道它们从哪里获得不同的信号。

编辑:我能说出的最好的结果是/proc每个程序使用的计算机制之间的差异。

pidstat正在使用/proc/<pid>/stathttps://github.com/sysstat/sysstat/blob/master/pidstat.c#L373-L382

mpstat正在使用/proc/uptime/proc/stathttps://github.com/sysstat/sysstat/blob/master/rd_stats.c#L59-L163

答案1

所以,我有一个原因,但它并不是真正的根本原因:

mpstat依赖于/proc/stat来获取其 CPU 指标。pidstat依赖于/proc/<pid>/stat。这些文件有时对在特定时间长度内观察到的内核 jiffies 数量存在分歧,我认为这是有道理的,因为我们正在讨论这样的时间分辨率增量:

17:06:41 /proc/stat 158257197
17:06:46 /proc/stat 158257230
17:06:51 /proc/stat 158257236
17:06:56 /proc/stat 158257279
# t3 - t0 = 82 jiffies

相对...

17:06:41 /proc/2763/stat 208862696
17:06:46 /proc/2763/stat 208862971
17:06:51 /proc/2763/stat 208863114
17:06:56 /proc/2763/stat 208863143
# t3 - t0 = 447 jiffies

当然,每个差异都要根据mpstatpidstat的源代码进行导数计算,转化为百分比等。

如果你进一步研究/proc并将 相加/proc/<pid>/task/**/stat,结果会更有意义。这个数字的增长速度比/proc/stat整体要慢,而且比 慢得多/proc/<pid>/stat

似乎如果我要进一步研究这个问题,我需要更好地了解内核如何针对我的特定版本编写这些文件。很明显,这/proc/<pid>/stat与 不一致/proc/<pid>/task/**/stat

相关内容