一、命令介绍
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
参考文章: