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

标签:  IO  iostat  监控

    网站的很多性能问题最终都会归结到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. 实时监控登陆用户的操作(类 FreeBSD 中的 watch) [2011-06-02 13:29:51]
    2. 日本的 Perl 项目 CloudForecast 分布样式监控系统 [2011-05-25 13:48:40]
    3. 批量添加主机到cacti+nagios的监控报警系统中 [2011-04-01 13:17:28]
    4. 使用smartmontools监控磁盘状况 [2011-03-22 23:30:50]
    5. Grid Control监控-进程累积导致的宕机 [2011-03-07 22:57:44]
    6. 网络流量监控软件vnStat [2011-02-09 22:09:13]
    7. Linux下三种常用的流量监控软件对比 [2011-01-30 19:36:51]
    8. ubuntu10.10 使用mrtg监控服务器的cpu、内存、网络等等情况 [2011-01-30 19:36:22]
    9. 企业服务器监控及报警配置打造(ganglia and nagios)-part 1 [2010-12-08 22:13:08]
    10. cacti 增加 Tokyocabinet 监控 [2010-08-15 23:06:50]
    11. Cacti 添加 Nginx 监控 [2010-05-26 13:22:17]
    12. cacti 增加 Mysql 监控 [2010-05-26 13:21:48]
    13. Cacti 添加 Apache 监控 [2010-05-25 22:44:01]
    14. Cacti 添加 Memcached 监控 [2010-05-25 22:43:18]
    15. Mysql监控指南 [2010-05-24 13:11:48]
    16. Oracle如何监控表的DML次数 [2010-04-27 23:33:10]
    17. tbstat:实时监控数据库统计状态的小工具 [2010-01-13 14:07:17]
    18. MySQLMonitor [2009-12-23 09:35:56]
    19. mysql监控工具系列 — mtop [2009-11-29 21:59:47]
    20. 谈谈服务器基础架构工具的选择 [2009-11-27 18:17:05]
    21. 利用Gearman来实现远程监控与管理 [2009-11-06 13:41:03]
    22. 我常用的主机监控shell脚本 [2009-11-06 09:20:27]
    23. Tips: PL/SQL中监控执行进度两种方法 [2009-10-21 09:05:06]
    24. 使用Oracle正则表达式监控应用到数据库的连接情况 [2009-10-19 23:26:18]
    25. 如何监控HP服务器硬件状态 [2009-10-19 15:48:24]
    26. 利用OpenIPMI监控服务器温度 [2009-10-19 15:47:02]
    27. cacti+apache+php+mysql+rrdtool搭建流量监控平台 [2009-10-15 15:28:25]


    你可能感兴趣的:(系统运维)