iostat命令详解

  

基础命令学习目录首页

 

iostat用于输出CPU和磁盘I/O相关的统计信息.
 
1.不加选项执行iostat
 
[patrickxu@vm1 ~]$ iostat
Linux 2.6.32-279.19.3.el6.ucloud.x86_64 (vm1)   06/11/2017  _x86_64_    (8 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.08    0.00    0.06    0.00    0.00   99.86
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
vda               0.45         0.29         8.10    6634946  183036680
vdb               0.12         3.11        30.55   70342034  689955328123456789
单独执行iostat,显示的结果为从系统开机到当前执行时刻的统计信息。
以上输出中,包含三部分:
 

  选项
  说明
 
  第一行
  最上面指示系统版本、主机名和当前日期

  avg-cpu
  总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值

  Device
  各磁盘设备的IO统计信息
 

Device中各列参数含义如下:
 

  选项
  说明
 
  %user
  CPU在用户态执行进程的时间百分比。

  %nice
  CPU在用户态模式下,用于nice操作,所占用CPU总时间的百分比

  %system
  CPU处在内核态执行进程的时间百分比

  %iowait
  CPU用于等待I/O操作占用CPU总时间的百分比

  %steal
  管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比

  %idle
  CPU空闲时间百分比
 

1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈 
2. 若 %idle 的值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量 
3. 若 %idle 的值持续低于1,则系统的CPU处理能力相对较低,表明系统中最需要解决的资源是 CPU
avg-cpu中各列参数含义如下:
 

  选项
  说明
 
  Device
  设备名称

  tps
  每秒向磁盘设备请求数据的次数,包括读、写请求,为rtps与wtps的和。出于效率考虑,每一次IO下发后并不是立即处理请求,而是将请求合并(merge),这里tps指请求合并后的请求计数。

  Blk_read/s
  Indicate  the amount of data read from the device expressed in a number of blocks per second. Blocks are equivalent to sectors with kernels 2.4 and later and therefore have a size of 512 bytes. With older kernels, a block is of indeterminate size.

  Blk_wrtn/s
  Indicate the amount of data written to the device expressed in a number of blocks per second.

  Blk_read
  取样时间间隔内读扇区总数量

  Blk_wrtn
  取样时间间隔内写扇区总数量
 

我们可以使用-c选项单独显示avg-cpu部分的结果,使用-d选项单独显示Device部分的信息。
 
2.指定采样时间间隔与采样次数
与sar命令一样,我们可以以”iostat interval [count] ”形式指定iostat命令的采样间隔和采样次数:
 
[patrickxu@vm1 ~]$ iostat -d 2 3
Linux 2.6.32-279.19.3.el6.ucloud.x86_64 (vm1)   06/12/2017  _x86_64_    (8 CPU)
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
vda               0.45         0.29         8.10    6634946  183051408
vdb               0.12         3.11        30.55   70342034  689955328
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
vda               0.00         0.00         0.00          0          0
vdb               0.00         0.00         0.00          0          0
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
vda               1.50         0.00        12.00          0         24
vdb               0.00         0.00         0.00          0          01234567891011121314
以上命令输出Device的信息,采样时间为1秒,采样2次,若不指定采样次数,则iostat会一直输出采样信息,直到按”ctrl+c”退出命令。注意,第1次采样信息与单独执行iostat的效果一样,为从系统开机到当前执行时刻的统计信息。
 
3.以kB为单位显示读写信息(-k选项)/以mB为单位显示读写信息(-m选项)
我们可以使用-k选项,指定iostat的部分输出结果以kB为单位,而不是以扇区数为单位:
 
[patrickxu@vm1 ~]$ iostat -d -k
Linux 2.6.32-279.19.3.el6.ucloud.x86_64 (vm1)   06/12/2017  _x86_64_    (8 CPU)
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               0.45         0.15         4.05    3317473   91525980
vdb               0.12         1.56        15.27   35171017  344977664123456
以上输出中,kB_read/s、kB_wrtn/s、kB_read和kB_wrtn的值均以kB为单位,相比以扇区数为单位,这里的值为原值的一半(1kB=512bytes*2)
 
4.更详细的io统计信息(-x选项)
为显示更详细的io设备统计信息,我们可以使用-x选项,在分析io瓶颈时,一般都会开启-x选项:
 
linux # iostat -x -k -d 1
Linux 2.6.16.60-0.21-smp (linux)     06/13/12
……
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00  9915.00    1.00   90.00     4.00 34360.00   755.25    11.79  120.57   6.33  57.60123456
以上各列的含义如下:
 

  选项
  说明
 
  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队列非空的时间比率
 

对于以上示例输出,我们可以获取到以下信息:
- 每秒向磁盘上写30M左右数据(wkB/s值)
- 每秒有91次IO操作(r/s+w/s),其中以写操作为主体
- 平均每次IO请求等待时间为120.57毫秒,处理时间为6.33毫秒
- 等待处理的IO请求队列中,平均有11.79个请求驻留
实际查看时,一般结合着多个选项查看: 如iostat -dxm 3
 
[root@yg-uhost724 ~]# iostat -dxm 5
Linux 2.6.32-279.19.16.el6.ucloud.x86_64 (yg-uhost724)  06/12/2017  _x86_64_    (24 CPU)
Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.69    29.89    1.36   21.52     0.05     0.20    23.04     0.04    1.96   0.29   0.67
sdb             682.88  1811.86   77.94  417.73     2.97     8.71    48.27     0.01    0.03   0.10   4.89
dm-14             0.00     0.00    0.03   41.47     0.00     0.16     8.00     0.01    0.12   0.02   0.10
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     8.00     0.00    7.24   0.07   0.00
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     8.00     0.00    0.07   0.04   0.00
dm-3              0.00     0.00    0.00    0.98     0.00     0.00     8.00     0.00    3.57   0.22   0.02
dm-5              0.00     0.00    0.18   50.51     0.00     0.20     8.00     0.03    0.44   0.01   0.07
dm-1              0.00     0.00    1.50    5.51     0.01     0.02     8.00     0.03    4.04   0.04   0.03
dm-6              0.00     0.00  123.23 1042.56     0.48     4.07     8.00     0.01    0.01   0.02   1.90
dm-4              0.00     0.00  635.74 1069.59     2.48     4.18     8.00     0.00    0.04   0.01   2.39
sdc               7.23   106.32    0.52    0.94     0.03     0.42   627.54     0.02   13.32  17.58   2.58
Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    15.00    0.40   17.80     0.00     0.10    10.90     0.00    0.10   0.10   0.18
sdb              82.60 11967.00  414.60 2500.20     1.94    56.51    41.07    12.07    4.14   0.07  21.02
dm-14             0.00     0.00    0.00    0.20     0.00     0.00     8.00     0.00    0.00   0.00   0.00
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-2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-3              0.00     0.00    0.00    1.80     0.00     0.01     8.00     0.00    0.11   0.11   0.02
dm-5              0.00     0.00    0.00    2.00     0.00     0.01     8.00     0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    2.40     0.00     0.01     8.00     0.01    4.17   1.25   0.30
dm-6              0.00     0.00    0.00   45.20     0.00     0.18     8.00     0.11    2.45   0.55   2.48
dm-4              0.00     0.00  497.20 14415.80     1.94    56.31     8.00    72.87    4.83   0.01  19.14
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.0012345678910111213141516171819202122232425262728           
      
---------------------
作者:森几许
来源:CSDN
原文:https://blog.csdn.net/xusensen/article/details/73080887
版权声明:本文为博主原创文章,转载请附上博文链接!
 

简介

iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

 

语法

iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [ interval [ count ] ]

 

入门使用

iostat -d -k 2

参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;2表示,数据显示每隔2秒刷新一次。

输出如下

复制代码
iostat -d -k 1 10
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              39.29        21.14         1.44  441339807   29990031
sda1              0.00         0.00         0.00       1623        523
sda2              1.32         1.43         4.54   29834273   94827104
sda3              6.30         0.85        24.95   17816289  520725244
sda5              0.85         0.46         3.40    9543503   70970116
sda6              0.00         0.00         0.00        550        236
sda7              0.00         0.00         0.00        406          0
sda8              0.00         0.00         0.00        406          0
sda9              0.00         0.00         0.00        406          0
sda10            60.68        18.35        71.43  383002263 1490928140

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda             327.55      5159.18       102.04       5056        100
sda1              0.00         0.00         0.00          0          0
复制代码

输出信息的意义

复制代码
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。"一次传输"意思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。

kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量; kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
复制代码

上面的例子中,我们可以看到磁盘sda以及它的各个分区的统计数据,当时统计的磁盘总TPS是39.29,下面是各个分区的TPS。(因为是瞬间值,所以总TPS并不严格等于各个分区TPS的总和)

 

指定监控的设备名称为sda,该命令的输出结果和上面命令完全相同。

 iostat -d sda 2

默认监控所有的硬盘设备,现在指定只监控sda。 

 

-x 参数

iostat还有一个比较常用的选项-x,该选项将用于显示和io相关的扩展数据。

iostat -d -x -k 1 10
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          1.56  28.31  7.80 31.49   42.51    2.92    21.26     1.46     1.16     0.03    0.79   2.62  10.28
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          2.00  20.00 381.00  7.00 12320.00  216.00  6160.00   108.00    32.31     1.75    4.50   2.17  84.20

 

输出信息的含义

复制代码
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%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
复制代码

 

-c 参数

iostat还可以用来获取cpu部分状态值:

iostat -c 1 10
avg-cpu: %user %nice %sys %iowait %idle
1.98 0.00 0.35 11.45 86.22
avg-cpu: %user %nice %sys %iowait %idle
1.62 0.00 0.25 34.46 63.67

 

常见用法

iostat -d -k 1 10         #查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat -d -m 2            #查看TPS和吞吐量信息(磁盘读写速度单位为MB)
iostat -d -x -k 1 10      #查看设备使用率(%util)、响应时间(await) iostat -c 1 10 #查看cpu状态

 

 

实例分析

复制代码
ostat -d -k 1 |grep sda10
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda10            60.72        18.95        71.53  395637647 1493241908
sda10           299.02      4266.67       129.41       4352        132
sda10           483.84      4589.90      4117.17       4544       4076
sda10           218.00      3360.00       100.00       3360        100
sda10           546.00      8784.00       124.00       8784        124
sda10           827.00     13232.00       136.00      13232        136
复制代码

上面看到,磁盘每秒传输次数平均约400;每秒磁盘读取约5MB,写入约1MB。

 

iostat -d -x -k 1
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          1.56  28.31  7.84 31.50   43.65    3.16    21.82     1.58     1.19     0.03    0.80   2.61  10.29
sda          1.98  24.75 419.80  6.93 13465.35  253.47  6732.67   126.73    32.15     2.00    4.70   2.00  85.25
sda          3.06  41.84 444.90 54.08 14204.08 2048.98  7102.04  1024.49    32.57     2.10    4.21   1.85  92.24

可以看到磁盘的平均响应时间<5ms,磁盘使用率>80。磁盘响应正常,但是已经很繁忙了。

原文链接:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858810.html

 

对于I/O-bond类型的进程,我们经常用iostat工具查看进程IO请求下发的数量、系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中IO方面是否存在瓶颈。

 

下面通过iostat命令使用实例,说明使用iostat查看IO请求下发情况、系统IO处理能力的方法,以及命令执行结果中各字段的含义。

 

1.不加选项执行iostat

我们先来看直接执行iostat的输出结果:

 
linux # iostat
Linux 2.6.16.60-0.21-smp (linux)     06/12/12

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.07    0.00    0.05    0.06    0.00   99.81

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.58         9.95        37.47    6737006   25377400
sdb               0.00         0.00         0.00        824          0
复制代码

单独执行iostat,显示的结果为从系统开机到当前执行时刻的统计信息。以上输出中,除最上面指示系统版本、主机名和日期的一行外,另有两部分:

avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值

Device: 各磁盘设备的IO统计信息

 

对于cpu统计信息一行,我们主要看iowait的值,它指示cpu用于等待io请求完成的时间。Device中各列含义如下:

  • Device: 以sdX形式显示的设备名称
  • tps: 每秒进程下发的IO读、写请求数量
  • Blk_read/s: 每秒读扇区数量(一扇区为512bytes)
  • Blk_wrtn/s: 每秒写扇区数量
  • Blk_read: 取样时间间隔内读扇区总数量
  • Blk_wrtn: 取样时间间隔内写扇区总数量

我们可以使用-c选项单独显示avg-cpu部分的结果,使用-d选项单独显示Device部分的信息。

 

2.指定采样时间间隔与采样次数

与sar命令一样,我们可以以"iostat interval [count] ”形式指定iostat命令的采样间隔和采样次数:

复制代码
linux # iostat -d 1 2
Linux 2.6.16.60-0.21-smp (linux)     06/13/12

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.55         8.93        36.27    6737086   27367728
sdb               0.00         0.00         0.00        928          0

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               2.00         0.00        72.00          0         72
sdb               0.00         0.00         0.00          0          0
复制代码

以上命令输出Device的信息,采样时间为1秒,采样2次,若不指定采样次数,则iostat会一直输出采样信息,直到按”ctrl+c”退出命令。注意,第1次采样信息与单独执行iostat的效果一样,为从系统开机到当前执行时刻的统计信息。

 

3.以kB为单位显示读写信息(-k选项)

我们可以使用-k选项,指定iostat的部分输出结果以kB为单位,而不是以扇区数为单位:

复制代码
linux # iostat -d -k
Linux 2.6.16.60-0.21-smp (linux)     06/13/12

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.55         4.46        18.12    3368543   13686096
sdb               0.00         0.00         0.00        464          0
复制代码

以上输出中,kB_read/s、kB_wrtn/s、kB_read和kB_wrtn的值均以kB为单位,相比以扇区数为单位,这里的值为原值的一半(1kB=512bytes*2)

 

4.更详细的io统计信息(-x选项)

为显示更详细的io设备统计信息,我们可以使用-x选项,在分析io瓶颈时,一般都会开启-x选项:

复制代码
linux # iostat -x -k -d 1
Linux 2.6.16.60-0.21-smp (linux)     06/13/12

……
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00  9915.00    1.00   90.00     4.00 34360.00   755.25    11.79  120.57   6.33  57.60
复制代码

以上各列的含义如下:

  • 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队列非空的时间比率

 

对于以上示例输出,我们可以获取到以下信息:

  1. 每秒向磁盘上写30M左右数据(wkB/s值)
  2. 每秒有91次IO操作(r/s+w/s),其中以写操作为主体
  3. 平均每次IO请求等待处理的时间为120.57毫秒,处理耗时为6.33毫秒
  4. 等待处理的IO请求队列中,平均有11.79个请求驻留

 

以上各值之间也存在联系,我们可以由一些值计算出其他数值,例如:

util = (r/s+w/s) * (svctm/1000)

对于上面的例子有:util = (1+90)*(6.33/1000) = 0.57603

 

posted @ 2019-02-16 18:26  马昌伟  阅读(2214)  评论(0编辑  收藏