一、命令介绍

  iostat 是最常用的磁盘 I/O 性能观测工具,它提供了每个磁盘的使用率、IOPS、吞吐量等各种常见的性能指标。当然,这些指标实际上来自 /proc/diskstats 文件。
  说到磁盘性能的衡量标准,必须要提到五个常见指标,也就是我们经常用到的,使用率、饱和度、IOPS、吞吐量以及响应时间等。这五个指标,是衡量磁盘性能的基本指标。

• 使用率:是指磁盘处理 I/O 的时间百分比。过高的使用率(比如超过 80%),通常意味着磁盘 I/O 存在性能瓶颈。这里要注意的是,使用率只考虑有没有 I/O,而不考虑 I/O 的大小。换句话说,当使用率是 100% 的时候,磁盘依然有可能接受新的 I/O 请求。
• 饱和度:是指磁盘处理 I/O 的繁忙程度。过高的饱和度,意味着磁盘存在严重的性能瓶颈。当饱和度为 100% 时,磁盘无法接受新的 I/O 请求。
• IOPS(Input/Output Per Second):是指每秒的 I/O 请求数。
• 吞吐量:是指每秒的 I/O 请求大小。
• 响应时间:是指 I/O 请求从发出到收到响应的间隔时间。

格式:

用法: iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]
选项:
[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -s ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ --dec={ 0 | 1 | 2 } ] [ --human ] [ -o JSON ]
[ [ -H ] -g <用户组名> ] [ -p [ <设备> [,...] | ALL ] ]
[ <设备> [...] | ALL ]

选项:

选项 含义
-c 显示CPU利用率报告。
-d 显示设备利用率报告。
-x 显示扩展统计信息。
-h 使人员更容易阅读输出报告信息
-k 显示统计信息(以千字节/秒为单位)
-m 显示统计信息(以兆字节/秒为单位)
-N 显示任何设备映射器设备的注册设备映射器名称,可用于查看 LVM 相关统计信息
-o JSON 以 JSON 格式显示统计信息。 JSON输出字段顺序未定义,将来可能会添加新字段。
-p [ { device [,…] | ALL } ]
显示系统使用的块设备及其所有分区的统计信息。如果在命令行上输入了设备名称,则会显示该设备及其所有分区的统计信息。最后,ALL关键字指示必须显示系统定义的所有块设备和分区的统计信息,包括从未使用过的统计信息。如果在此选项之前定义了选项-j,则可以使用所选的持久名称类型指定在命令行上输入的设备。
-y 如果以给定的时间间隔显示多个记录,则省略自系统引导以来第一个具有统计信息的报告。
-z 告诉iostat忽略在采样期间没有任何活动的任何设备的输出。建议配合-y选项一起用

二、输出信息含义

老版:

[root@test ~]# iostat -V
sysstat 版本 10.1.5
(C) Sebastien Godard (sysstat <at> orange.fr)
[root@test ~]# iostat -d -x 1
Linux 3.10.0-1160.el7.x86_64 (zabbix)   2021年05月24日     _x86_64_    (8 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               5.45     0.09   11.17  156.12   540.34  5423.33    71.30     3.42   20.47   99.36   14.82   5.92  99.06
scd0              0.00     0.00    0.00    0.00     0.00     0.00   114.22     0.00    0.28    0.28    0.00   0.28   0.00
dm-0              0.00     0.00    1.34    0.11     5.37     0.43     8.00     0.07   48.06   45.41   81.12  39.14   5.68
dm-1              0.00     0.00   15.27  156.11   534.93  5422.89    69.53     4.10   23.86  116.16   14.83   5.69  97.44
dm-2              0.00     0.00   15.27  156.11   534.93  5422.89    69.53     4.10   23.86  116.16   14.83   5.69  97.47
dm-3              0.00     0.00    0.12    0.67     4.19    17.02    53.58     3.38 4265.11  159.02 5022.38  28.51   2.26
dm-4              0.00     0.00    0.00    0.00     0.00     0.00    53.36     0.00    3.38    3.38    0.00   3.15   0.00
dm-6              0.00     0.00   15.15  164.77   530.75  5405.52    65.99     4.20   23.24  120.86   14.26   5.52  99.26

新版本:

[root@test ~]# iostat -V
sysstat 版本 12.2.0
(C) Sebastien Godard (sysstat <at> orange.fr)

[root@test ~]# iostat -h -xd 1 1 sda
Linux 3.10.0-1160.el7.x86_64 (zabbix)   2021年05月24日     _x86_64_    (8 CPU)

     r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz Device
   11.21    542.3k     5.47  32.8%   99.45    48.4k sda

     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz Device
  156.42      5.3M     0.09   0.1%   16.04    34.7k sda

     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz Device
    0.00      0.0k     0.00   0.0%    0.00     0.0k sda

  aqu-sz  %util Device
    3.62  99.1% sda

输出信息含义:

指标 含义
rrqm/s
每秒合并读请求,%rrqm表示合并读请求的百分比
wrqm/s 每秒合并写请求,%wrqm表示合并读请求的百分比
r/s 每秒发送给磁盘的读请求。相当于合并后请求数
w/s 每秒发送给磁盘的写请求。相当于合并后请求数
rkB/s 每秒从磁盘读取的数据量,单位为KB
wkB/s 每秒向磁盘写入的数据量,单位为KB
rareq-sz 平均读请求大小,单位为kB
wareq-sz 平均写请求大小,单位为kB
avgrq-sz 平均请求的大小(以扇区为单位)
avgqu-sz 平均请求队列长度,新版为aqu-sz
await 处理 I/0 请求的平均时间,这包括队列中的等待时间和设备实际处理时间,以毫秒为单位。
r_await 处理读取请求的平均时间,这包括队列中的等待时间和设备实际处理时间,以毫秒为单位。
w_await 处理写入请求的平均时间,这包括队列中的等待时间和设备实际处理时间,以毫秒为单位。
svctm 处理I/O请求所需的平均时间(不包括等待时间),单位为毫秒,这个字段是不可靠的,将在之后版本删除
%util 磁盘处理I/O的时间百分比

这些指标中,我们要注意要注意:

• %util:就是我们前面提到的磁盘 I/O 使用率。由于可能存在并行I/O,100%并不一定表明磁盘I/O饱和。
• r/s+ w/s:就是 IOPS。
• rkB/s+wkB/s:就是吞吐量。
• r_await+w_await:就是响应时间,相同时间间隔。

  在观测指标时,也别忘了结合请求的大小( rareq-sz 和 wareq-sz)一起分析。你可能注意到,从 iostat 并不能直接得到磁盘饱和度。事实上,饱和度通常也没有其他简单的观测方法,不过,你可以把观测到的,平均请求队列长度或者读写请求完成的等待时间,跟基准测试的结果(比如通过 fio)进行对比,综合评估磁盘的饱和情况。

三、示例演示

查看 sda 磁盘I/O信息,并且打印出 cpu 使用情况。

[root@test ~]# iostat -hxdcyz 1 1 sda
Linux 3.10.0-1160.el7.x86_64 (zabbix)   2021年05月24日     _x86_64_    (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.5%    0.0%    1.5%   15.8%    0.0%   77.2%

     r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz Device
   27.00    816.0k     3.00  10.0%   74.26    30.2k sda

     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz Device
  170.00      6.1M     0.00   0.0%   50.20    37.0k sda

     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz Device
    0.00      0.0k     0.00   0.0%    0.00     0.0k sda

  aqu-sz  %util Device
   16.27  99.6% sda

查看 sda 磁盘(包括分区)I/O信息。

[root@zabbix ~]# iostat -hxdy -p sda 1 1
Linux 3.10.0-1160.el7.x86_64 (zabbix)   2021年05月24日     _x86_64_    (8 CPU)

     r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz Device
    6.00    140.0k     0.00   0.0%   47.00    23.3k sda
    0.00      0.0k     0.00   0.0%    0.00     0.0k sda1
    6.00    140.0k     0.00   0.0%   47.00    23.3k sda2

     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz Device
  130.00      5.6M     0.00   0.0%   89.19    43.9k sda
    0.00      0.0k     0.00   0.0%    0.00     0.0k sda1
  130.00      5.6M     0.00   0.0%   89.19    43.9k sda2

     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz Device
    0.00      0.0k     0.00   0.0%    0.00     0.0k sda
    0.00      0.0k     0.00   0.0%    0.00     0.0k sda1
    0.00      0.0k     0.00   0.0%    0.00     0.0k sda2

  aqu-sz  %util Device
   11.27  99.5% sda
    0.00   0.0% sda1
   11.27  99.5% sda2


参考文章:

Linux性能优化实战

发表评论

验证码: 2 + 8 =