通过『iostat -dx 1』命令监控IO性能
网站的很多性能问题最终都会归结到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
注:开头显示的是自系统启动开始的平均值,后面显示的是每段时间间隔里的平均值。
介绍一下相关参数的含义:
注:建议对照源代码来记忆这些参数都是如何计算出来的。
关于这些参数,相对重要的是后面几个,具体来说是: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}.
参考资料:
您可能还对下面的文章感兴趣:
- 实时监控登陆用户的操作(类 FreeBSD 中的 watch) [2011-06-02 13:29:51]
- 日本的 Perl 项目 CloudForecast 分布样式监控系统 [2011-05-25 13:48:40]
- 批量添加主机到cacti+nagios的监控报警系统中 [2011-04-01 13:17:28]
- 使用smartmontools监控磁盘状况 [2011-03-22 23:30:50]
- Grid Control监控-进程累积导致的宕机 [2011-03-07 22:57:44]
- 网络流量监控软件vnStat [2011-02-09 22:09:13]
- Linux下三种常用的流量监控软件对比 [2011-01-30 19:36:51]
- ubuntu10.10 使用mrtg监控服务器的cpu、内存、网络等等情况 [2011-01-30 19:36:22]
- 企业服务器监控及报警配置打造(ganglia and nagios)-part 1 [2010-12-08 22:13:08]
- cacti 增加 Tokyocabinet 监控 [2010-08-15 23:06:50]
- Cacti 添加 Nginx 监控 [2010-05-26 13:22:17]
- cacti 增加 Mysql 监控 [2010-05-26 13:21:48]
- Cacti 添加 Apache 监控 [2010-05-25 22:44:01]
- Cacti 添加 Memcached 监控 [2010-05-25 22:43:18]
- Mysql监控指南 [2010-05-24 13:11:48]
- Oracle如何监控表的DML次数 [2010-04-27 23:33:10]
- tbstat:实时监控数据库统计状态的小工具 [2010-01-13 14:07:17]
- MySQLMonitor [2009-12-23 09:35:56]
- mysql监控工具系列 — mtop [2009-11-29 21:59:47]
- 谈谈服务器基础架构工具的选择 [2009-11-27 18:17:05]
- 利用Gearman来实现远程监控与管理 [2009-11-06 13:41:03]
- 我常用的主机监控shell脚本 [2009-11-06 09:20:27]
- Tips: PL/SQL中监控执行进度两种方法 [2009-10-21 09:05:06]
- 使用Oracle正则表达式监控应用到数据库的连接情况 [2009-10-19 23:26:18]
- 如何监控HP服务器硬件状态 [2009-10-19 15:48:24]
- 利用OpenIPMI监控服务器温度 [2009-10-19 15:47:02]
- cacti+apache+php+mysql+rrdtool搭建流量监控平台 [2009-10-15 15:28:25]