Linux 下查看硬盘 IO 的 5 个工具
磁盘IO是系统性能的一个核心方面。无论您是在管理数据库、Web应用程序还是云服务器,系统读取和写入数据的效率都会影响从响应时间到稳定性的方方面面。
了解Linux中的磁盘IO
磁盘IO是指RAM和存储设备(HDD、SSD或网络存储)之间的读写操作,当应用程序请求数据时,系统要么从内存中检索(速度快),要么从磁盘中检索(速度慢)。争夺磁盘访问的多个进程会导致争用和性能下降。
IO要监控的关键指标
- Throughput – 数据传输速度(MB/s、GB/s)。
- IOPS – 跟踪每秒发生的磁盘读写次数。
- Latency – 读/写作完成所需的时间 (ms)。
- Disk Utilization – 时间维度的磁盘利用率,磁盘主动处理请求的时间百分比。
有趣的事实:在 AWS 中,您获得的 IOPS 与磁盘的大小有关。
用于磁盘 IO 监控的内置 Linux 工具
如果您是命令行爱好者,本节适合您。我们将介绍用于监控磁盘 IO 的 5 种强大工具。我最喜欢的是 dstat,但所有这些工具都有助于实时跟踪读/写速度、磁盘利用率和 IOPS,因此它们对于性能分析和故障排除至关重要。
1. iostat – 一般磁盘性能概述
iostat 是跟踪磁盘 IO 性能的最有效方法之一。默认情况下,大多数 Linux 发行版不包含 iostat 🤷 使用以下方法安装它:
sudo apt install sysstat # Debian/Ubuntu
sudo yum install sysstat # RHEL/CentOS
sudo dnf install sysstat # Fedora
iostat 基本用法:
iostat -x 1
-x
提供扩展统计信息(包括利用率和队列深度)。1
每秒更新一次统计信息。
[root@iZ2ze4oi71k3qgdxwsyn07Z ~]# iostat -x 1
Linux 4.18.0-193.28.1.el8_2.x86_64 (iZ2ze4oi71k3qgdxwsyn07Z) 02/19/2025 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.54 0.00 1.34 0.27 0.00 96.84
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
vda 1.24 106.23 43.79 1717.17 0.00 0.34 0.06 0.32 11.21 0.59 0.03 35.21 16.16 0.48 5.17
vdb 0.07 7.68 2.52 88.60 0.00 8.43 0.15 52.33 2.71 0.43 0.00 34.51 11.54 0.44 0.34
avg-cpu: %user %nice %system %iowait %steal %idle
1.76 0.00 2.02 0.25 0.00 95.97
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
vda 9.00 136.00 136.00 2091.00 0.00 7.00 0.00 4.90 0.67 0.91 0.06 15.11 15.38 0.41 6.00
vdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
输出中的关键指标:
r/s, w/s (Reads/Writes per second)
每秒发生的读/写次数。rkB/s, wkB/s (Read/Write throughput)
每秒读/写的数据量。r_await w_await (Read/Write latency)
每个 I/O 请求的平均等待时间(单位:毫秒),包括请求在队列中的等待时间和实际处理时间。%util (Disk utilization)
磁盘繁忙的时间百分比。如果这始终高于80-90%,则磁盘可能是瓶颈。当然,即便已经100%了,也不一定饱和了,尤其是对于并发处理IO的硬盘,需要结合 await 等其他指标来判断。
问:有时看到 %util
很高但是 r/s
、w/s
很低?这是为啥?
答:通常是因为单个请求较大。
2. iotop – 基于进程的 IO 监控
iotop 是一种实时磁盘监控工具,其工作方式与 TOP 类似,但专门用于跟踪进程的磁盘读写活动。它将帮助您确定哪些应用程序或服务生成的 IO 负载最多。
安装:
sudo apt install iotop # Debian/Ubuntu
sudo yum install iotop # RHEL/CentOS
然后执行 iotop
命令即可看到实时的磁盘 IO 活动。
[root@iZ2ze4oi71k3qgdxwsyn07Z ~]# iotop
DISK READ/DISK WRITE
显示每个进程每秒读取和写入的数据量。SWAPIN %
指示进程是否正在使用交换空间(值越低越好)。IO>
进程等待 IO 的时间百分比(较高表示进程受磁盘限制)。COMMAND
显示使用磁盘资源的确切过程。
高 IO>
值(高于 80%)意味着进程受 IO 限制,这意味着此应用程序花费大量时间等待从磁盘读取数据。从来都不是一件好事。此外,此应用程序不仅会很慢。这也可能减慢使用同一磁盘的其他应用程序的速度。
3. vmstat – 系统范围的性能指标
vmstat 是一种多功能工具,用于监控整体系统性能,包括磁盘 IO、CPU、内存和进程。虽然它不像 iotop 那样提供每个进程的详细信息,但它提供了系统运行状况的快速快照。输入 vmstat 1
命令就可以运行了:
[root@iZ2ze4oi71k3qgdxwsyn07Z ~]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 145752 286128 3068024 0 0 12 455 1 0 2 1 97 0 0
1 0 0 145480 286128 3068048 0 0 0 1379 7568 14441 1 1 98 0 0
1 0 0 145452 286152 3068096 0 0 0 1833 7236 13618 1 2 97 1 0
1 0 0 145284 286124 3067744 0 0 0 3138 7555 14623 2 2 96 1 0
0 0 0 146536 286124 3067780 0 0 0 2119 7213 14066 1 1 97 0 0
0 0 0 146428 286148 3067852 0 0 0 2448 7525 15049 2 2 96 0 0
r and b (Run/Block Processes)
运行(等待CPU时间的)和阻塞(通常是在等待IO)的进程数。bi and bo (Block Input/Output)
读写 Block 的数量。wa (IO Wait)
等待 IO 的时间百分比,高 wa 值(例如,高于 20%)表明系统受 IO 限制。id (CPU Idle)
空闲 CPU 时间的百分比。如果 id 较低且 wa 较高,则表明存在 IO 瓶颈。简单来说,这意味着主机上运行的应用程序正在等待磁盘,而没有执行太多计算。
症状与可能的原因:
高 b
:Block 的进程太多,可能是由于硬盘 IO 争用高 bo 但是低 bi
:写入密集型工作负载,可能来自日志或备份高 wa
:磁盘 IO 瓶颈;存储设备可能太慢或过载。高 bi 低 bo
:读取密集型工作负载,常见于数据库查询或文件访问中。
4. dstat – 可定制的性能监控
dstat 是一个强大而灵活的工具,它结合了 iostat、vmstat 和 netstat 的功能,这就是为什么当我在终端中工作时,它是我的首选工具。它以易于阅读的格式提供磁盘 IO、网络活动、CPU、内存等的实时统计数据。
安装:
sudo apt install dstat # Debian/Ubuntu
sudo yum install dstat # RHEL/CentOS
基本用法:
dstat
使用 dstat 分析磁盘 IO 指标:
dstat -d --disk-util --disk-tps
read/write
: 读写吞吐util
:硬盘 IO 利用率#read #write
:每秒读写次数
5. sar – 历史磁盘 IO 监控
sar (System Activity Reporter) 非常适合捕获和分析历史性能数据。因此,当您需要诊断过去或特定时间窗口内发生的磁盘 IO 问题时,这是要使用的工具,而不是上面列出的其他工具。但请注意,与上述其他工具(只是命令行工具)不同,sar 实际上涉及一个一直运行以收集数据的服务。
安装:
sudo apt install sysstat # Debian/Ubuntu
sudo yum install sysstat # RHEL/CentOS
启动 sysstat 服务:
sudo systemctl enable --now sysstat
默认情况下,sar 每 10 分钟收集一次系统指标并将其存储在 /var/log/sysstat/
。可以在配置文件 /etc/sysstat/sysstat
中更改频率。
要查看当前磁盘IO指标:
sar -d 1 5
-d
该选项用于控制显示磁盘 IO 统计信息。1
每秒更新一次统计信息。5
显示 5 次更新。
各个列的含义:
tps
:每秒事务数。rd_sec/s & wr_sec/s
:每秒读写的扇区。await
:平均 I/O 请求等待时间(单位:毫秒)。%util
:磁盘IO利用率。
总结
磁盘 IO 是系统性能的关键组成部分,因此监控它是至关重要的。上面列出的工具都是强大的工具,可以帮助您实时跟踪磁盘 IO 活动,识别瓶颈并解决性能问题。如果您是命令行爱好者,那么这些工具将是您的好帮手。