iostat 命令详解

iostat
性能评估的一个主要部分就是磁盘性能。iostat 命令提供了存储接口的性能指标。

# iostat
Linux 2.6.9-55.0.9.ELlargesmp (prolin3)     12/27/2008
 
avg-cpu:  %user   %nice    %sys %iowait   %idle
          15.71    0.00    1.07    3.30   79.91
 
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
cciss/c0d0        4.85        34.82       130.69  307949274 1155708619
cciss/c0d0p1      0.08         0.21         0.00    1897036       3659
cciss/c0d0p2     18.11        34.61       130.69  306051650 1155700792
cciss/c0d1        0.96        13.32        19.75  117780303  174676304
cciss/c0d1p1      2.67        13.32        19.75  117780007  174676288
sda               0.00         0.00         0.00        184          0
sdb               1.03         5.94        18.84   52490104  166623534
sdc               0.00         0.00         0.00        184          0
sdd               1.74        38.19        11.49  337697496  101649200
sde               0.00         0.00         0.00        184          0
sdf               1.51        34.90         6.80  308638992   60159368
sdg               0.00         0.00         0.00        184          0
... and so on ...
输出的开始部分显示了可用 CPU 和 I/O 等待时间等指标,与您在 mpstat 命令中看到的相同。

输出的下一部分显示对系统上每个磁盘设备非常重要的指标。让我们看一看这些列的含义:

tps          每秒的传输数量,例如,每秒的 I/O 操作数。注:这只是 I/O 操作的数量;每个操作可能非常大,也可能非常小。

Blk_read/s   每秒从该设备读取的块数。通常,块的大小为 512 字节。这是一个磁盘利用率较好的值。

Blk_wrtn/s   每秒写入该设备的块数

Blk_read     到目前为止从该设备读取的块数。注意,这并不是正在发生的情况。很多块已经从该设备读取。
             可能现在什么也没有读取。观察一段时间,看是否有变化。

Blk_wrtn     写入该设备的块数。


在一个拥有很多设备的系统中,输出可能需要通过屏幕多次滚动 — 这使得某些内容较难检查,
尤其当您查找特定设备时更是如此。可以通过将该设备作为参数传递只获得特定设备的指标。

# iostat sdaj   
Linux 2.6.9-55.0.9.ELlargesmp (prolin3)     12/27/2008
 
avg-cpu:  %user   %nice    %sys %iowait   %idle
          15.71    0.00    1.07    3.30   79.91
 
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sdaj              1.58        31.93        10.65  282355456   94172401

开始部分显示的 CPU 指标可能没什么用处。要取消在输出开始部分显示的与 CPU 有关的统计信息,使用 -d 选项。
 
可以将可选参数放在结尾处,让 iostat 以固定的时间间隔显示设备统计信息。要每隔 5 秒获取一次该设备的统计信息,共 10 次,执行以下命令:

# iostat -d sdaj 5 10

You can display the stats in kilobytes instead of just bytes using the -k option:

# iostat -k -d sdaj    
Linux 2.6.9-55.0.9.ELlargesmp (prolin3)     12/27/2008
 
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sdaj              1.58        15.96         5.32  141176880   47085232

尽管以上输出可能非常有帮助,但很多信息并不容易显示。例如,磁盘问题的一个主要原因是磁盘服务时间,
即,磁盘将数据送达请求该数据的进程的时间。要获得该级别的指标,我们需要使用 -x 选项获得磁盘的“扩展”统计信息。

# iostat -x sdaj
Linux 2.6.9-55.0.9.ELlargesmp (prolin3)     12/27/2008
 
avg-cpu:  %user   %nice    %sys %iowait   %idle
          15.71    0.00    1.07    3.30   79.91
 
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sdaj         0.00   0.00  1.07  0.51   31.93   10.65    15.96     5.32    27.01     0.01    6.26   6.00   0.95
让我们看一看这些列的含义:


rrqm/s    每秒合并的读请求数。磁盘请求排成队列。只要可能,内核就会尝试将多个请求合并成一个请求。
          该指标测量读取传输的合并请求数。

wrqm/s    与读取类似,这是合并的写请求数。

r/s       每秒向该设备发出的读请求数

w/s       同样,它是每秒向该设备发出的写请求数

rsec/s    每秒从该设备读取的扇区数

wsec/s    每秒写入该设备的扇区数

rkB/s     每秒从该设备读取的数据,以 KB/秒为单位

wkB/s     写入该设备的数据,以 kb/s 为单位

avgrq-sz  读请求的平均大小(扇区数)

avgqu-sz  该设备的请求队列的平均长度

await     设备发出 I/O 请求经过的平均时间,以毫秒为单位。这是服务时间与队列中的等待时间的总和。

svctm     设备的平均服务时间,以毫秒为单位

%util     设备的带宽利用率。如果该值接近于 100%,则表明该设备已饱和。

用法
可以使用这些命令的组合从输出中获取一些有意义的信息。记住,在从进程获取请求时磁盘速度可能很慢。磁盘中的数据到达队列所花费的时间称为服务时间。如果您想找出服务时间最长的磁盘,执行以下命令:

# iostat -x | sort -nrk13
sdat         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    18.80     0.00   64.06  64.05   0.00
sdv          0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    17.16     0.00   18.03  17.64   0.00
sdak         0.00   0.00  0.00  0.14    0.00    1.11     0.00     0.55     8.02     0.00   17.00  17.00   0.24
sdm          0.00   0.00  0.00  0.19    0.01    1.52     0.01     0.76     8.06     0.00   16.78  16.78   0.32
... and so on ...
这表明磁盘 sdat 的服务时间最长(64.05 毫秒)。为什么时间这么长呢?可能性很多,但最可能的原因有三个:

该磁盘获取了大量请求,以至于平均服务时间长。
该磁盘利用已移到可能的最大带宽。
该磁盘原本速度就很慢。
查看输出,我们看到读取数/秒和写入数/秒为 0.00(几乎没有发生任何事件),因此我们可以排除第一种可能性。
利用率也为 0.00%(最后一列),因此我们可以排除第二种可能性。这就剩下了第三种可能性。
但得出该磁盘原本速度慢的结论之前,我们需要更加仔细地观察该磁盘。
我们可以只检查该磁盘,每隔 5 秒 检查一次,共 10 次。

# iostat -x sdat 5 10

如果输出显示相同的平均服务时间、读取速率和利用率,则可以断定最有可能是第三种情况。
如果这些数值发生了变化,我们可以获取更详细的线索来了解该设备服务时间较长的原因。

同样,可以对读取速率列进行排序,以显示处于恒定读取速率下的磁盘。

# iostat -x | sort -nrk6 
sdj          0.00   0.00  1.86  0.61   56.78   12.80    28.39     6.40    28.22     0.03   10.69   9.99   2.46
sdah         0.00   0.00  1.66  0.52   50.54   10.94    25.27     5.47    28.17     0.02   10.69  10.00   2.18
sdd          0.00   0.00  1.26  0.48   38.18   11.49    19.09     5.75    28.48     0.01    3.57   3.52   0.61
... and so on ...
    
该信息可以帮助您查找“热”磁盘,即进行很多读取或写入的磁盘。如果该磁盘的确“热”,
则应确定“热”的原因;可能是该磁盘上定义的某个文件系统正在进行大量读取操作。如果是这种情况,
则应考虑将该文件系统在多个磁盘之间进行条带化,以分发负载,从而最大程度地减小某个特定磁盘“热”的可能性。

你可能感兴趣的:(Linux,日记)