linux常用定位方法-iostat
iostat分析io性能
对于I/O-bond类型的进程(如写话单、读写数据库等与磁盘紧密相关的进程),我们经常用iostat工具查看进程IO请求下发的数量、系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中IO方面是否存在瓶颈。 下面通过iostat命令的使用实例,说明使用iostat查看IO请求下发情况、系统IO处理能力的方法,以及命令执行结果中各字段的含义。
dd if=/dev/zero of=test.img bs=1M count=1024 & //写一个1G大小的文件,块大小1M
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 4.00 0.00 106.00 0.00 44.73 864.30 55.80 678.11 0.00 678.11 9.43 100.00
sda 0.00 2.00 4.00 90.00 0.02 41.98 914.98 46.67 522.81 129.0 540.31 10.64 100.00
sda 0.00 6.00 0.00 96.00 0.00 44.95 959.00 45.71 317.92 0.00 317.92 10.42 100.00
sda 0.00 117.0 1.00 86.00 0.00 39.25 924.14 32.83 560.55 188.0 564.88 11.49 100.00
sda 0.00 3.00 0.00 97.00 0.00 44.55 940.54 53.12 339.96 0.00 339.96 10.31 100.00各个字段含义
rrqm/s : 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
(即1s内两次读同一块算一次,统计的是io覆盖区块程度)
wrqm/s : 每秒对该设备的写请求被合并次数
r/s : 每秒完成的读次数
w/s : 每秒完成的写次数
rsec/s : 每秒读数据量(数据块为单位,0.5kB)
wsec/s : 每秒写数据量(数据块为单位,0.5kB)
avgrq-sz : 平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度(单位个IO请求)
await : 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm : 平均每次IO请求的处理时间(毫秒为单位)
%util : 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率iostat数据解读
因为以1M的块大小写文件,且没有指定iflag=direct,因次这个写任务会走buffer IO。
- 从wrqm/s项非零看,IO调度层存在合并的IO,也说明的确是buffer IO。
- 从w/s项可知该本地硬盘的iops写能力只能平均达100iops/s,说明磁盘本身的转速不高。
- 从wMB/s项显示吞吐量最高达45MB/s左右,一样不高。
- 从avgqu-sz看平均队列深度为50左右,而svctm为10ms,所以await值会比较高,400~500的均值正常。
综合评价,该本地磁盘的IO性能偏低。