最近测试一个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%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。