技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统运维 --> 通过『iostat -dx 1』命令监控IO性能

通过『iostat -dx 1』命令监控IO性能

浏览:4293次  出处信息

    网站的很多性能问题最终都会归结到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}.

        参考资料:

  • iostat -x
  • How Linux iostat computes its results
  • iostat: (r/s + w/s) * svctm = %util on Linux
  • 建议继续学习:

    1. Mysql监控指南    (阅读:19504)
    2. 关于IO的同步,异步,阻塞,非阻塞    (阅读:14294)
    3. 批量添加主机到cacti+nagios的监控报警系统中    (阅读:13085)
    4. 我常用的主机监控shell脚本    (阅读:11298)
    5. 7 天打造前端性能监控系统    (阅读:9832)
    6. 如何监控HP服务器硬件状态    (阅读:8912)
    7. Cacti 添加 Nginx 监控    (阅读:8714)
    8. Linux下三种常用的流量监控软件对比    (阅读:8490)
    9. Cacti 添加 Memcached 监控    (阅读:7942)
    10. Linux服务器性能评估    (阅读:7902)
    QQ技术交流群:445447336,欢迎加入!
    扫一扫订阅我的微信号:IT技术博客大学习
    © 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

    京ICP备15002552号-1