最近测试一个ftp下载服务相关项目,根据以往经验,与服务器diskio,netio性能有很直接的关系
之前只是听说过iostat命令,今天具体百度了下,学习下iostat命令的详细使用方法
敲 iostat
[root@localhost test]# iostat
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 2013年12月05日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.02 0.00 0.07 0.00 0.00 99.90
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.28 2.12 35.10 2917532 48306386
dm-0 0.41 1.77 2.96 2432042 4074312
dm-1 0.00 0.00 0.00 2576 0
dm-2 4.06 0.35 32.14 476490 44232056
输入信息中每个信息的意义如下:
cpu的统计信息,如果是多cpu系统,显示的所有cpu的平均统计信息。
- %user:用户进程消耗cpu的比例
- %nice:用户进程优先级调整消耗的cpu比例
- %sys:系统内核消耗的cpu比例
- %iowait:等待磁盘io所消耗的cpu比例
- %idle:闲置cpu的比例(不包括等待磁盘io的s)
磁盘的统计信息:
- Device:设备的名称
- Tps:设备上每秒的io传输(可能多个io被组成一个io)的次数
- Blk_read/s:每秒从设备读取block(kernel 2.4以上,block=512byte)的数量
- Blk_wrtn/s:每秒写到设备block(kernel 2.4以上,block=512byte)的数量
- Blk_read:间隔时间内,从设备读取总的block数量
- Blk_wrtn:间隔时间内,写到设备总的block数量
敲 iostat --help
[root@localhost test]# iostat --help
用法: iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]
选项:
[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ]
[ <设备> [...] | ALL ] [ -p [ <设备> [,...] | ALL ] ]
下边详细探究每个参数的意义
-c参数(与-d互斥)
输出CPU统计信息
敲 iostat -c
[root@localhost test]# iostat -c
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 2013年12月05日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.02 0.00 0.07 0.00 0.00 99.90
-d参数(与-c互斥)
输出设备和分区的I/O统计信息
敲 iostat -d
[root@localhost test]# iostat -d
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 2013年12月05日 _x86_64_ (2 CPU)
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.28 2.14 37.31 2944012 51377066
dm-0 0.41 1.79 2.96 2458162 4077056
dm-1 0.00 0.00 0.00 2576 0
dm-2 4.34 0.35 34.35 476490 47299992
-N参数(不常用)
暂时没搞懂,貌似是显示磁盘分区信息?详细目录?差不多资料,有待研究……
敲 iostat -N
[root@localhost test]# iostat -N
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 2013年12月05日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.02 0.00 0.07 0.00 0.00 99.90
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.29 2.14 38.17 2949236 52559330
VolGroup-lv_root 0.41 1.79 2.96 2463370 4077976
VolGroup-lv_swap 0.00 0.00 0.00 2576 0
VolGroup-lv_home 4.44 0.35 35.21 476506 48481336
-n 参数(不常用)
查看NFS上流量信息
敲 iostat -n
[root@localhost test]# iostat -n
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 2013年12月05日 _x86_64_ (2 CPU)
Filesystem: rBlk_nor/s wBlk_nor/s rBlk_dir/s wBlk_dir/s rBlk_svr/s wBlk_svr/s ops/s rops/s wops/s
-h参数(不常用)
可读性更好的NFS目录信息统计
敲 iostat -h
[root@localhost test]# iostat -h
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 2013年12月05日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.02 0.00 0.07 0.00 0.00 99.90
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.29 2.14 38.90 2949636 53573802
dm-0 0.41 1.79 2.96 2463770 4078784
dm-1 0.00 0.00 0.00 2576 0
dm-2 4.53 0.35 35.93 476506 49495000
-k -m参数(这个用的多)
-k 用“kbytes/秒”代替“块/秒”显示统计信息
-m 用“mbytes/秒”代替“块/秒”显示统计信息
敲 iostat -k(-m)
[root@localhost test]# iostat -k
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 2013年12月05日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.02 0.00 0.08 0.00 0.00 99.90
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.29 1.07 19.65 1474994 27071613
dm-0 0.41 0.89 1.48 1232061 2039736
dm-1 0.00 0.00 0.00 1288 0
dm-2 4.59 0.17 18.17 238253 25031868
[root@localhost test]# iostat -m
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 2013年12月05日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.02 0.00 0.08 0.00 0.00 99.90
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 0.29 0.00 0.02 1440 26440
dm-0 0.41 0.00 0.00 1203 1991
dm-1 0.00 0.00 0.00 1 0
dm-2 4.59 0.00 0.02 232 24448
-t参数(不常用)
显示NFS目录统计信息
敲 iostat -t
[root@localhost nmon_x86_64_rhel4]# iostat -t
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 2014Ū07Ղ04ɕ _x86_64_ (1 CPU)
2014Ū07Ղ04ɕ 15ʱ22·Ա1ī
avg-cpu: %user %nice %system %iowait %steal %idle
0.04 0.00 0.29 0.01 0.00 99.66
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.37 33.27 23.62 85820646 60944050
dm-0 0.29 1.02 2.02 2625506 5220000
dm-1 0.00 0.00 0.00 3096 0
dm-2 2.84 32.24 21.60 83183690 55724008
-V参数
显示版本号并通出
敲 iostat -V
[root@localhost nmon_x86_64_rhel4]# iostat -V
sysstat °汾 9.0.4
(C) Sebastien Godard (sysstat <at> orange.fr)
-x参数(这个也用的多)
显示扩展统计信息
敲 iostat -x
[root@localhost nmon_x86_64_rhel4]# iostat -x
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 2014Ū07Ղ04ɕ _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.04 0.00 0.29 0.01 0.00 99.66
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.01 2.76 0.18 0.19 33.29 23.62 154.05 0.00 1.53 0.66 0.02
dm-0 0.00 0.00 0.04 0.25 1.02 2.02 10.34 0.00 1.33 0.51 0.01
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 2.23 0.78 0.00
dm-2 0.00 0.00 0.14 2.70 32.27 21.60 18.97 0.03 10.26 0.03 0.01
每个输出消息含义:
- rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
- wrqm/s: 每秒对该设备的写请求被合并次数
- r/s: 每秒完成的读次数
- w/s: 每秒完成的写次数
- rkB/s: 每秒读数据量(kB为单位)
- wkB/s: 每秒写数据量(kB为单位)
- avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
- avgqu-sz: 平均等待处理的IO请求队列长度
- await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
- svctm: 平均每次IO请求的处理时间(毫秒为单位)
- %util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
干介绍有些枯燥
下面列举写常见用法
iostat -d -k 2
kb/s显示磁盘信息,每2s刷新一次
[root@localhost nmon_x86_64_rhel4]# iostat -d -k 2
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 2014Ū07Ղ04ɕ _x86_64_ (1 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.37 16.71 11.81 43115523 30473465
dm-0 0.29 0.51 1.01 1312813 2610764
dm-1 0.00 0.00 0.00 1548 0
dm-2 2.84 16.20 10.80 41796985 27862680
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 20.27 2594.59 0.00 3840 0
dm-0 0.00 0.00 0.00 0 0
dm-1 0.00 0.00 0.00 0 0
dm-2 20.27 2594.59 0.00 3840 0
^C
iostat -dkx 1 10
kb/s显示磁盘统计信息及扩展信息,每1s刷新 ,刷新10次结束
[root@localhost nmon_x86_64_rhel4]# iostat -dkx 1 10
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 2014Ū07Ղ04ɕ _x86_64_ (1 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.01 2.76 0.18 0.19 16.85 11.81 154.47 0.00 1.53 0.66 0.02
dm-0 0.00 0.00 0.04 0.25 0.51 1.01 10.34 0.00 1.33 0.51 0.01
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 2.23 0.78 0.00
dm-2 0.00 0.00 0.14 2.70 16.34 10.80 19.11 0.03 10.26 0.03 0.01
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 36.76 1.47 5158.82 5.88 270.15 0.03 0.77 0.69 2.65
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 36.76 1.47 5158.82 5.88 270.15 0.03 0.77 0.69 2.65
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 19.72 0.00 2507.04 0.00 254.29 0.01 0.57 0.50 0.99
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 19.72 0.00 2507.04 0.00 254.29 0.01 0.57 0.50 0.99
就给出了3次刷新数,一样的东西,太长了大家就看着有点乱是吧
实例分析
[root@localhost nmon_x86_64_rhel4]# iostat -d -k 1 10|grep dm-2
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 2014Ū07Ղ04ɕ _x86_64_ (1 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
dm-2 2.84 16.47 10.80 42504905 27863480
dm-2 20.25 1777.22 25.32 1404 20
dm-2 4.88 624.39 0.00 512 0
dm-2 0.00 0.00 0.00 0 0
dm-2 0.00 0.00 0.00 0 0
dm-2 5.00 640.00 0.00 512 0
dm-2 0.00 0.00 0.00 0 0
dm-2 10.00 640.00 20.00 512 16
dm-2 0.00 0.00 0.00 0 0
dm-2 2.47 316.05 0.00 256 0
上面的数据说明:dm-2分区10s内 每秒传输次数约 4,;每秒磁盘读取约961kb,写入约5.6kb
[root@localhost nmon_x86_64_rhel4]# iostat -d -k -x 1 10|grep dm-2
Linux 2.6.32-279.el6.x86_64 (localhost.localdomain) 2014Ū07Ղ04ɕ _x86_64_ (1 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
dm-2 0.00 0.00 0.14 2.70 16.54 10.80 19.25 0.03 10.25 0.03 0.01
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 0.00 5.06 0.00 20.25 8.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 3.61 0.00 462.65 0.00 256.00 0.00 0.33 0.33 0.12
dm-2 0.00 0.00 2.33 0.00 297.67 0.00 256.00 0.00 0.50 0.50 0.12
dm-2 0.00 0.00 3.90 0.00 498.70 0.00 256.00 0.00 0.33 0.33 0.13
dm-2 0.00 0.00 3.95 0.00 505.26 0.00 256.00 0.00 0.67 0.67 0.26
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 3.57 0.00 457.14 0.00 256.00 0.00 0.33 0.33 0.12
这里重点看 await %util
上面数据说明:磁盘平均响应时间约1ms(但是有峰值10ms的存在,建议长时间统计,有待继续观察);磁盘使用率不足1%,磁盘响应正常
由此看来,瓶颈不在磁盘读写上,或者你的压力还不够!
个人拙见,有不对的地方,还请大神指教!
补充下-x参数个含义分析方法:
参考
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
rsec/s:每秒读取的扇区数;
wsec/:每秒写入的扇区数。
rKB/s:The number of read requests that were issued to the device per second;
wKB/s:The number of write requests that were issued to the device per second;
avgrq-sz 平均请求扇区的大小
avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。
await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
svctm 表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长, 系统上运行的应用程序将变慢。
%util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度
。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。