性能分析之pidstat新版本的%wait和mpstat的%iowait、top的wa
前几天在微信群中跟一个人讨论问题,其中提到了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是这样解释的。
wa, IO-wait : time waiting for I/O completion
mpstat中的iowait是这样的。
%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是这样解释的。
- Rafy 领域实体框架演示(4) - 使用本地文件型数据库 SQLCE 绿色部署
- spring 的OpenSessionInViewFilter简介
- Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
- 【Java SE】Java NIO系列教程(三) Buffer
- android混淆
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)
- 两个activity或者activity和fragment传值
- 【强烈推荐】Java工程师如何从一名普通的码农成长为一位大神
- Remoting: Server encountered an internal error
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](四)
- 在mono 3.0 下运行ASP.NET 4网站的主意事项
- 《干货系列》SQL语句-知无不言言无不尽
- OutOfMemoryError异常系列之方法区溢出和运行时常量溢出池溢出
- 代码转换工具 Code Converter 2013
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法