iostat介绍
iostat是输入输出状态统计工具,能够检测出磁盘的操作,iostat会针对每一个磁盘进行分析,给出各个指标的统计数据,iostat的数据一般来自/proc/diskstats:
[root@cdn]# iostat -x 1 Linux 2.6.18-164.el5 (cdn-cfgmgr123002.cm6) 06/05/2013 avg-cpu: %user %nice %system %iowait %steal %idle 18.32 0.02 8.76 0.19 0.00 72.71 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.53 69.68 2.37 82.21 120.00 1213.87 15.77 0.58 6.89 0.14 1.18
从上面可以看到ipstat不仅给出了磁盘的数据,还给出cpu的使用情况,不过这篇文章主要是解释磁盘的各个指标含义:
rrqm/s:该指标是指合并的读请求数目,有些请求操作系统会做一些合并再发给设备;
r/s:最终向io设备发起的读次数,等于合并后的请求和不能合并的请求之和;
rsec/s:每秒读取的扇区数;
rrqm/s和r/s的区别是:它们不是一个层面的东西,rrqm是指在进行最终io之前,操作系统的文件系统根据读请求的特点,将连续的读请求合并成可以向设备一次读取的合并过程中,合并了多少个读请求,而r/s是指最终落到磁盘上的读操作,如果没有能够合并的读操作,那么rrqm/s=0,注意一次系统调用并不一定是一个读请求,假如一次读取1MB的内容,由于io每次buffer一般是256kb,所以一次系统调用可能产生多个读请求。
比如发起了100个read系统调用,每个读4K,假如这100个都是连续的读,由于硬盘通常允许最大的request为256KB,那么block层会把这100个读请求合并成2个request,一个256KB,另一个144KB,rrqpm/s为100,因为100个request都发生了合并,不管它最后合并成几个;r/s为2,因为最后的request数为2。
avgrq-sz:平均每次操作设备读写的扇区数目
avgqu-sz:平均IO队列的长度,是指前面有多少io在排队,队列越长说明io越慢
await:平均每次io需要等待的时间,如果大于10ms,一般就比较差了,跟平均io队列长度和每次io服务时间关系较大
svctm:每次io的服务时间ms,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
%util:每秒有多少时间在进行io操作。该参数代表了设备的繁忙程度,如果单个磁盘到了100%,说明磁盘处理能力不够。
%util=(r/s+w/s)*(svctm/1000)
更多关于io的信息参见:
https://www.kernel.org/doc/Documentation/iostats.txt
http://www.symantec.com/connect/articles/getting-hang-iops-v13