先用iostat看系统IO整体情况,再用iotop定位高IO进程。iostat显示设备利用率%util和等待时间await,若%util>80%且await升高,说明存在IO瓶颈;结合iotop查看具体进程IO行为,按P键排序找出IO占用最高的进程,再用lsof分析其文件操作,进而优化应用或调整优先级。两者结合可高效诊断Linux IO性能问题。

当系统出现响应变慢、服务卡顿等问题时,IO性能往往是关键排查方向之一。Linux提供了iostat和iotop等工具,帮助我们定位磁盘读写瓶颈。掌握这些工具的使用方法,能快速判断是磁盘压力过大、进程频繁读写还是配置不合理导致的问题。
iostat:查看系统级IO统计
iostat属于sysstat包,用于监控CPU使用率和设备/分区的IO情况。它提供的是周期性的平均数据,适合分析整体趋势。
安装命令(以CentOS为例):yum install sysstat -y
常用用法示例:iostat -x 1 5
每1秒输出一次,共5次。-x表示显示扩展统计信息,包含更多关键指标。
关键字段说明:- %util:设备利用率百分比。接近100%说明设备已饱和,存在IO等待。
- await:平均每次IO请求的等待时间(毫秒),包括队列时间和实际服务时间。
- r_await / w_await:分别表示读和写的平均等待时间。若显著高于预期,说明磁盘响应慢。
- svctm:平均服务时间(已弃用,仅作参考)。
- avgqu-sz:平均IO队列长度。大于1可能意味着并发IO过高。
- 若 %util > 80% 且 await 明显升高,说明该设备存在IO瓶颈。
- 高 await + 低 %util 可能是硬件问题或单个大IO请求导致。
- 结合CPU的iowait(由top或iostat的CPU部分查看),若iowait持续偏高,说明CPU在等待IO完成。
iotop:定位具体进程的IO行为
iostat只能看到设备级别的负载,无法知道是哪个进程在读写。iotop则像top一样,实时显示每个进程/线程的IO使用情况。
安装命令:yum install iotop -y
常用启动方式:iotop -o:只显示正在执行IO的进程。
iotop -b -n 5:批量模式输出5次,适合脚本调用。
关键列说明:- TID:线程ID。
- PRIO:IO调度优先级。
- IO>:进程的IO使用率(包含读和写)。
- swpd:交换内存使用量(非IO相关)。
- READ 和 WRITE:当前读写速度。
- 运行后按 o 键可切换为仅显示有IO活动的进程。
- 按 P 键按IO使用率排序,快速找出“IO大户”。
- 结合PID,可用 ps aux | grep PID 查看具体服务名称。
实战排查流程
面对疑似IO瓶颈的服务,可按以下步骤操作:
- 先运行 iostat -x 1 观察各磁盘的 %util 和 await 是否异常。
- 确认某块盘负载高后,立即启动 iotop -o 查看哪些进程在频繁读写。
- 找到高IO进程后,用 lsof -p PID 查看其打开的文件,判断是否合理(如日志狂刷、数据库全表扫描等)。
- 评估是否需要调整进程优先级(ionice)、优化应用逻辑,或升级存储设备。
基本上就这些。iostat看面,iotop看点,两者结合,能高效定位Linux系统的IO性能问题。关键是理解指标含义,并建立正常基线以便对比异常。











