使用iostat监控磁盘io性能时,首先运行iostat -x 1查看实时扩展统计,重点关注%util(设备利用率)是否持续接近100%、await(平均i/o等待时间)是否偏高,结合r/s、w/s和rkb/s、wkb/s判断i/o频率与吞吐量;若发现异常,通过iostat -x /dev/sda 1定位具体设备,分析r_await和w_await区分读写延迟,观察avgqu-sz判断队列积压情况;确认存在io瓶颈后,使用iotop或pidstat -d 1找出导致高io的进程,并进行针对性优化,完成从现象到根源的完整排查。

监控磁盘IO性能,iostat是最常用也最有效的工具之一。它能帮你快速了解系统整体的磁盘读写状况,定位是否存在IO瓶颈。
iostat基础用法和关键指标
iostat属于sysstat包,一般系统安装后就能直接使用。最简单的命令是
iostat -x 1,这里的
-x表示输出扩展统计信息,
1表示每隔1秒刷新一次数据。
首次运行iostat时,它显示的是从系统启动到现在的平均值。当你加上刷新间隔(比如1秒),它后续输出的就是最近1秒内的实时性能数据,这对排查当前问题更有意义。
重点关注以下几个核心指标:
- %util:设备利用率,即设备忙于处理I/O请求的时间百分比。持续接近或达到100%说明磁盘存在IO瓶颈。
- await:平均每次I/O请求的等待时间(单位毫秒),包括在队列中的时间和实际处理时间。数值越高,说明IO响应越慢。
- svctm:平均每次I/O的服务时间(已废弃,参考价值有限)。
- r/s 和 w/s:每秒的读请求数和写请求数,反映I/O操作频率。
- rkB/s 和 wkB/s:每秒读取和写入的数据量(单位KB),衡量吞吐量。
比如,如果看到某个磁盘的%util长期在90%以上,await也明显偏高,基本可以判断这个磁盘是性能瓶颈点。
结合参数深入分析IO模式
要更深入地分析IO性能,需要结合不同的iostat参数来观察。
-
查看具体设备:使用
iostat -x /dev/sda 1
可以只监控特定磁盘(如sda),避免被其他设备干扰。 -
区分读写情况:
r_await
和w_await
分别表示读和写的平均等待时间。如果w_await特别高,可能是写操作密集或写缓存有问题。 -
观察队列长度:
avgqu-sz
表示平均请求队列长度。数值越大,说明请求排队越严重,通常和高await一起出现。
有时候系统整体IO压力不大,但某个应用响应很慢。这时候可以先用iostat看整体情况,如果发现某块磁盘负载高,再进一步排查是哪个进程导致的。
定位高IO的罪魁祸首进程
iostat只能告诉你哪个磁盘忙,但不知道是哪个进程在“捣乱”。这时候需要配合其他工具。
-
iotop:类似于top命令,但显示的是每个进程的实时磁盘读写速率。运行
iotop
可以直接看到哪些进程在进行大量IO操作。 -
pidstat:来自sysstat包,使用
pidstat -d 1
可以按秒监控每个进程的IO使用情况,适合记录和分析历史数据。
基本排查流程是:先用
iostat -x 1看磁盘整体性能,发现%util高或await异常 → 用
iotop或
pidstat -d 1找出占用IO最多的进程 → 针对性地优化或限制该进程。
基本上就这些,不复杂但容易忽略细节。











