iostat
是一个用于监控系统输入/输出设备负载的命令行工具。
推荐选项–human -d -x
它有很多的选项,这是日常使用最简单最频繁的选项组合:
-
iostat --human -d -x sda sdb 1 3
--human
或-h
:这个选项使得输出的数据以人类可读的格式显示,例如使用KB、MB等单位而不是单纯的字节数。-d
:这个选项告诉iostat
只显示设备(如硬盘)的利用率报告,而不会显示CPU的使用情况。-x
:扩展统计信息。使用这个选项会显示更详细的I/O统计信息,包括但不限于平均请求大小、平均队列长度等。sda sdb
:指定要监控的设备名称,在这个例子中是sda
和sdb
。这些通常是系统中的硬盘或其他存储设备。1 3
:这两个数字指定了两个参数:间隔时间(1秒)和报告次数(3次)。也就是说,iostat
将每秒生成一次报告,并总共生成3次这样的报告。
综合起来,这条命令的作用是在接下来的3秒内,每隔1秒对 sda
和 sdb
这两个设备进行一次详细的I/O统计分析,并以易读的格式输出结果。
输出的分类与含义
对于 iostat
输出的表头的解释,可以按照 I/O 请求速率、I/O 数据量、请求合并、请求延迟、队列长度、请求大小、设备性能 等类别进行分类。
# iostat --human -d -x sda sdb 1 3
Linux 4.18.0-305.3.1.el8.x86_64 (localhost) 02/26/2025 _x86_64_ (4 CPU)
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sdb 1.26 48.58 128.5k 7.2M 1.22 0.00 49.2% 0.0% 11.77 6.14 0.31 102.4k 151.7k 1.98 9.9%
sda 1.29 53.15 133.2k 8.0M 1.27 0.00 49.6% 0.0% 10.28 28.79 1.54 103.4k 154.0k 3.79 20.7%
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sdb 0.00 24.00 0.0k 1.3M 0.00 0.00 0.0% 0.0% 0.00 2.96 0.07 0.0k 53.4k 2.58 6.2%
sda 0.00 21.00 0.0k 1.8M 0.00 0.00 0.0% 0.0% 0.00 18.24 0.38 0.0k 85.3k 1.71 3.6%
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sdb 0.00 8.00 0.0k 0.0k 0.00 0.00 0.0% 0.0% 0.00 0.12 0.00 0.0k 0.0k 1.25 1.0%
sda 0.00 17.00 0.0k 0.0k 0.00 0.00 0.0% 0.0% 0.00 0.18 0.00 0.0k 0.0k 1.06 1.8%
以下是分类后的详细解释:
1. I/O 请求速率
- r/s:每秒完成的读请求数(Read requests per second)。
表示设备每秒处理的读操作次数。 - w/s:每秒完成的写请求数(Write requests per second)。
表示设备每秒处理的写操作次数。
2. I/O 数据量
- rkB/s:每秒读取的数据量(Read KB per second)。
表示设备每秒从磁盘读取的数据量,单位为 KB。 - wkB/s:每秒写入的数据量(Write KB per second)。
表示设备每秒向磁盘写入的数据量,单位为 KB。
3. 请求合并
- rrqm/s:每秒合并的读请求数(Read requests merged per second)。
表示每秒有多少个读请求被合并(通常是相邻的请求)。 - wrqm/s:每秒合并的写请求数(Write requests merged per second)。
表示每秒有多少个写请求被合并。 - %rrqm:读请求合并的百分比(Percentage of read requests merged)。
表示合并的读请求占总读请求的百分比。 - %wrqm:写请求合并的百分比(Percentage of write requests merged)。
表示合并的写请求占总写请求的百分比。
4. 请求延迟
- r_await:读请求的平均等待时间(毫秒)(Average time for read requests to be served)。
表示从读请求发出到完成所需的平均时间。 - w_await:写请求的平均等待时间(毫秒)(Average time for write requests to be served)。
表示从写请求发出到完成所需的平均时间。
5. 队列长度
- aqu-sz:平均请求队列长度(Average queue length of the requests)。
表示设备上等待处理的 I/O 请求的平均数量。
6. 请求大小
- rareq-sz:读请求的平均大小(KB)(Average size of read requests)。
表示每个读请求的平均数据量。 - wareq-sz:写请求的平均大小(KB)(Average size of write requests)。
表示每个写请求的平均数据量。
7. 设备性能
- svctm:平均服务时间(毫秒)(Average service time for I/O requests)。
表示设备处理每个 I/O 请求所需的平均时间。 - %util:设备的利用率百分比(Percentage of time the device was busy)。
表示设备处于忙碌状态的时间百分比。如果接近 100%,说明设备可能成为性能瓶颈。
分类总结:
类别 | 字段 | 含义 |
---|---|---|
I/O 请求速率 | r/s | 每秒完成的读请求数 |
w/s | 每秒完成的写请求数 | |
I/O 数据量 | rkB/s | 每秒读取的数据量(KB) |
wkB/s | 每秒写入的数据量(KB) | |
请求合并 | rrqm/s | 每秒合并的读请求数 |
wrqm/s | 每秒合并的写请求数 | |
%rrqm | 读请求合并的百分比 | |
%wrqm | 写请求合并的百分比 | |
请求延迟 | r_await | 读请求的平均等待时间(毫秒) |
w_await | 写请求的平均等待时间(毫秒) | |
队列长度 | aqu-sz | 平均请求队列长度 |
请求大小 | rareq-sz | 读请求的平均大小(KB) |
wareq-sz | 写请求的平均大小(KB) | |
设备性能 | svctm | 平均服务时间(毫秒) |
%util | 设备的利用率百分比 |
%util
对支持并发的SSD/NVME/RAID
- %util = 设备忙碌的总时间 / 系统已经过去的时间
- 如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
- 此指标只对传统的HDD有效,而对支持并发的
SSD/NVME/RAID
没有参考意义。因为并发会导致设备忙碌的总时间远超系统已经过去的时间,往往能看到超过100%甚至200%的情况。