性能分析之pidstat新版本的%wait和mpstat的%iowait、top的wa

2020-09-24 15:37:38 浏览数 (1)

前几天在微信群中跟一个人讨论问题,其中提到了pidstat中的%wait到底是不是等待io的。

当时我有一些含糊的是pidstat中似乎没看过有wait这个计数器。但是基于top中的wa和mpstat中的%iowait的多年判断经验。我当时说是在等io的。

当时我还说,如果我判断错了,下次见面,我请他喝花酒(不是你想的花酒,

)。 为了验证自己的说法,自己上服务器看了一下。一看不要紧,结果没wait这个计数器!!

这下蒙了,为什么我没这个计数器呢?

但是这个问问题的同学界面是这样的。

多出来一个wait。而这个wait确实是在pidstat的-u的CPU参数中输出的。

虽然看到的是pidstat输出的CPU的wait,但是却和mpstat的iowait以及top中的wa对应不上。

从上图可以看出,mpstat输出的%iowait并没有值,但是pidstat中的%wait却有比较高的值。在同一时间输出的数据相差如此之大,确实有蹊跷。

于是,我问他的环境中的版本是什么。他说是sysstat11.5.5的版本可以看到。我输出自己环境里的pidstat是10.1.5,在Centos8和7中如果用yum安装,都没这么高的版本。

分析过程

没有办法,本着对技术的偏执,我觉得要搞清楚有没有解释错!

来看一下分析过程。

计数器解释

要想了解计数器值为什么对不上,首先得先知道他们是不是同样的含义。

因为几个命令的参数值不一样,而top和mpstat也用了多年。那就先检查一下这几个计数器的帮助是怎么定义的。 top中的wa是这样解释的。

代码语言:javascript复制
wa, IO-wait : time waiting for I/O completion

mpstat中的iowait是这样的。

代码语言:javascript复制
%iowait
    Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.

这也是我为什么判断CPU中的wait是等IO的原因,因为上面两个计数器都明确说了等IO。 但是!!!我的错误判断的转折点来了。 我装了最新版本的sysstat之后,看到pidstat中的wait是这样解释的。

0 人点赞