网站的很多性能问题最终都会归结到IO头上,所以说理解iostat命令是非常有必要的。

小技巧:你知道iostat是从哪里得到IO相关信息的吗?使用strace命令能跟踪到答案:shell> strace -eopen iostat

open("/proc/diskstats", O_RDONLY)

注:关于diskstats的说明,参见官方文档(field1 ~ field11)。

我最常用的iostat命令格式是:『iostat -dx 1』,意思是每隔一秒显示一次IO扩展信息。shell> iostat -dx 1

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s

sda 0.18 37.71 0.65 2.63 50.18 322.08

avgrq-sz avgqu-sz await svctm %util

113.46 0.35 107.49 1.67 0.55

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s

sda 0.00 4208.00 0.00 165.00 0.00 163872.00

avgrq-sz avgqu-sz await svctm %util

993.16 119.54 1144.36 6.07 100.10

注:开头显示的是自系统启动开始的平均值,后面显示的是每段时间间隔里的平均值。

介绍一下相关参数的含义:

rrqm/s:队列中每秒钟合并的读请求数量

wrqm/s:队列中每秒钟合并的写请求数量

r/s:每秒钟完成的读请求数量

w/s:每秒钟完成的写请求数量

rsec/s:每秒钟读取的扇区数量

wsec/s:每秒钟写入的扇区数量

avgrq-sz:平均请求数据的大小

avgqu-sz:平均请求队列的长度

await:平均每次请求的等待时间

svctm:平均每次请求的服务时间

util:设备的利用率

注:建议对照源代码来记忆这些参数都是如何计算出来的。

关于这些参数,相对重要的是后面几个,具体来说是:util,svctm,await,avgqu-sz:

util是设备的利用率。如果它接近100%,通常说明设备能力趋于饱和(并不绝对,比如设备有写缓存)。有时候可能会出现大于100%的情况,这多半是计算时四舍五入引起的。

svctm是平均每次请求的服务时间。这里有一个公式:(r/s+w/s)*(svctm/1000)=util。举例子:如果util达到100%,那么此时svctm=1000/(r/s+w/s),假设IOPS是1000,则svctm大概在1毫秒左右,如果长时间大于这个数值,说明系统出了问题。

await是平均每次请求的等待时间。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。

avgqu-sz是平均请求队列的长度。毫无疑问,队列长度越短越好,这就不用多做解释了。

提醒:如果是RAID等多盘系统,iostat结果的参考价值可能有变化,建议查阅相关资料。

说明:svctm参数在未来某个版本的iostat会被删除,官方文档是这样描述原因的:

The average service time (svctm field) value is meaningless, as I/O statistics are calculated at block level, and we don’t know when the disk driver starts to process a request. For this reason, this field will be removed in a future sysstat version.

另外,有时候iostat会显示一些很离谱的结果,官方FAQ给出了如下的解释:

Because of a Linux kernel bug, iostat -x may display huge I/O response times (svctm) and a bandwidth utilization (%util) of 100% for some devices. Indeed these devices have a value for the field #9 (beginning after the device name) in /proc/{partitions,diskstats} which is always different from 0, and even negative sometimes. Yet this field should go to zero, since it gives the number of I/Os currently in progress (it is incremented as requests are submitted, and decremented as they finish). To (temporarily) solve the problem, you should reboot your system to reset the counters in /proc/{partitions,diskstats}.

参考资料:

您可能还对下面的文章感兴趣:

mysql iostat_通过『iostat -dx 1』命令监控IO性能相关推荐

  1. 2017-2018-2 20155303『网络对抗技术』Final:Web渗透获取WebShell权限

    2017-2018-2 『网络对抗技术』Final:Web渗透获取WebShell权限 --------CONTENTS-------- 一.Webshell原理 1.什么是WebShell 2.We ...

  2. 『老叶茶馆』2021年度热文推荐

    下面是『老叶茶馆』微信公众号2021年度热文列表,按时间先后顺序列出.有几篇文章值得多次回味,请各位读者们查收. MySQL SQL优化的正确姿势 MySQL数据库CPU问题一则 count 浅析 云 ...

  3. 『数据结构与算法』解读树(Tree)和二叉树(Binary Tree)!

    『数据结构与算法』解读树(Tree)和二叉树(Binary Tree)! 文章目录 一. 树 1.1. 树的定义 1.2. 树的基本术语 1.3. 树的性质 二. 二叉树 2.1. 二叉树的定义 2. ...

  4. 前端vue里面点击加载更多_js实现『加载更多』功能实例

    DEMO : 滚动加载示例 关于如何实现『加载更多』功能,网上有插件可用,例如比较著名的使用iscroll.js实现的上拉加载更多.下拉刷新功能. 但实际用起来却是很麻烦.由于是第三方插件,要按照对方 ...

  5. 『功守道』软件供应链安全大赛·C源代码赛季启示录

    背景 软件供应链安全,这可以说是一个新近的人造的概念热词.泛泛来讲,如今的软件系统中任何一方都不是孤立的:套用到企业的场景,就有了供应链的概念. 以典型互联网企业为例.线上生产环境所依赖的操所系统,配 ...

  6. 20155308『网络对抗技术』Exp7:网络欺诈防范

    20155308『网络对抗技术』Exp7:网络欺诈防范 原理与实践说明 1.实践目标 本实践的目标是:理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. 2.实践内容概述 简单应用SET ...

  7. iOS多线程:『NSOperation、NSOperationQueue』详尽总结

    2019独角兽企业重金招聘Python工程师标准>>> iOS多线程:『NSOperation.NSOperationQueue』详尽总结 转载: 原地址https://www.ji ...

  8. 『Python基础-11』集合 (set)

    # 『Python基础-11』集合 (set) 目录: 集合的基本知识 集合的创建 访问集合里的值 向集合set增加元素 移除集合中的元素 集合set的运算 1. 集合的基本知识 集合(set)是一个 ...

  9. [日推荐]『知乐邀请函』好用的H5制作工具

    2019独角兽企业重金招聘Python工程师标准>>> 今天小编要给大家推荐一款很好用的H5制作小程序. 知乐邀请函 简介:知乐邀请函,在微信小程序中制作流行的H5页面.有官方和设计 ...

最新文章

  1. Discuz! X2.5 添加自定义数据调用模块(简单方法)
  2. 教育部回应:没有使用“第一学历”这个概念!
  3. 利用 scipy.signal中的spectrogram分析信号的时频联合分布
  4. ThinkPHP5.0中Redis的使用和封装
  5. 跨站请求伪造(CSRF)-简述
  6. 【bzoj2724】[Violet 6]蒲公英 分块+STL-vector
  7. Luogu P1262 间谍网络 【强连通分量/缩点】By cellur925
  8. Java不同压缩算法的性能比较
  9. 业务功能中包含邮件发送,怎么测试?
  10. 如何在本地开发环境调试微信 JS-SDK
  11. tensorboard ckpt pb 模型的输出节点_FlyAI小课堂:Tensorflow-模型和数据的保存和载入...
  12. linux http 访问限制,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  13. mysql5.6 安装配置 老系统_mysql 5.6 从陌生到熟练之-安装配置(windows系统)
  14. 前端直接读取文本文件内容
  15. 数字转为人民币大写汉字输出(大力看了都喊nb的详细教程)
  16. 运行lidar_align进行全局优化时出现程序中断问题
  17. Spring IOC和DI 的学习资料(附带大师英文文章)
  18. 数学建模方法-灰色预测
  19. C练题笔记之:Leetcode-793. 阶乘函数后 K 个零
  20. laravel门面模式

热门文章

  1. matplotlib画散点图
  2. Django配置开发环境和生产环境以及配置Jinja2模板引擎
  3. linux下桥接模式设置静态IP实现上网
  4. wxWidgets:wxCommandLinkButton类用法
  5. wxWidgets:使用 Open Watcom 编译的 WxWidgets 的 DLL 版本
  6. wxWidgets:文档/视图框架
  7. wxWidgets:wxHTML 概述
  8. wxWidgets:进程间通信
  9. boost::type_erasure::less_than_comparable相关的测试程序
  10. boost::math模块使用根查找的示例