客户描述:
感到业务运行速度缓慢。
工程师描述:
登录主机,查看IO情况,执行iostat -x -d 30,查看磁盘的读写状态数据await(平均等待时间)和util(利用率),一般观察时间为30S。
分析解决:
确认sddg硬盘在统计数据中出现await在一段时间明显大于其他硬盘且util值为100% 。可以看出该盘性能明显低于其他盘,该硬盘为慢盘。
直接更换该硬盘。测试后问题解决
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
好了由上面我们引入了iostat这个工具当然还有它的兄弟mpstat就像我们常用的数据收集工具sar一样,mpstat和iostat也是由sysstat这个软件包提供。
iostat:生成三种类型的报告中,CPU使用率报告,设备利用率报告和网络文件系统(NFS)的报告。
mpstat:生成处理器相关的统计数据。你可以配置LANG=C 使它提供24小时制的显示。
iostat简单介绍iostat会显示从系统开机到当前执行时刻的统计信息。
1.不加任何选项执行iostat
[root@rhel6 ~]# iostat
以上输出中,除最上面指示系统内核版本、主机名和日期的一行外,另有两部分:
avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值
Device: 各磁盘设备的IO统计信息
对于cpu统计信息一行,我们主要看iowait的值,它指示cpu用于等待io请求完成的时间。
Device中各列含义如下:
Device: 以sdX形式显示的设备名称
tps: 每秒进程下发的IO读、写请求数量
Blk_read/s: 每秒读block数量(一般一个block为512bytes)
Blk_wrtn/s: 每秒写block数量
Blk_read: 取样时间间隔内读block总数量
Blk_wrtn: 取样时间间隔内写block总数量
我们可以使用-c选项单独显示avg-cpu部分的结果,使用-d选项单独显示Device部分的信息。
2.iostat默认是用block为单位显示,我们可以用megabytes为单位显示读写信息(-m)
[root@rhel6 ~]# iostat -d -m
3.更详细的io统计信息(-x选项)为显示更详细的io设备统计信息,我们可以使用-x选项,在分析io瓶颈时,一般都会开启-x选项:
[root@rhel6 ~]# iostat -x -m
Linux 2.6.32-220.el6.x86_64 (rhel6) 11/06/2014 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.12 0.00 0.11 0.29 0.00 99.47
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %uti
sda 11.83 27.48 4.25 0.48 0.06 0.11 75.03 0.11 22.84 2.08 0.98
sdb 0.04 1.77 0.09 0.53 0.01 0.01 49.33 0.01 12.69 7.45 0.46
以上各列的含义如下:
rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s: 每秒对该设备的写请求被合并次数r/s: 每秒完成的读次数
w/s: 每秒完成的写次数rMB/s: 每秒读数据量(MB为单位)
wMB/s: 每秒写数据量(MB为单位)avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度
await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm: 平均每次IO请求的处理时间(毫秒为单位)
%util: 采用周期内用于IO请求利用率,但这个利用率到100%时为饱和
对于以上示例输出,我们可以获取到以下信息:比如sda磁盘
每秒向磁盘上写0.48左右数据(wMB/s值)
每秒平均有5次IO操作(r/s+w/s),其中以读操作为主体
平均每次IO请求等待处理的时间为22.84毫秒,处理耗时为2.08毫秒
等待处理的IO请求队列中,平均有0.11个请求驻留
以上各值之间也存在联系,我们可以由一些值计算出其他数值,例如:
util = (r/s+w/s) * (svctm/1000)
对于上面的例子有:util = (4.25+0.48)*(2.08/1000) =0.0098384 ==》%0.98
mpstat简单介绍 比如我们想列出CPU0的统计信息
[root@rhel6 ~]# mpstat -P 0
Linux 2.6.32-220.el6.x86_64 (rhel6) 11/06/14 _x86_64_ (4 CPU)
20:44:38 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
20:44:38 0 0.21 0.00 0.07 0.23 0.00 0.01 0.00 0.00 99.48