要监控linux磁盘i/o性能,应使用iotop和iostat工具分别从进程级别和设备级别进行分析。一、使用iotop可查看哪些进程频繁读写磁盘,重点关注disk write和io>列,按o键过滤无i/o活动的进程;二、使用iostat监控设备级性能,关注%util(超过80%可能为瓶颈)、await(数值高表示响应慢)等指标,若%util接近100%,结合iotop排查具体进程;三、应对建议:突发i/o高峰可检查定时任务,长期高负载需优化程序或升级硬件,i/o等待高但吞吐小则检查磁盘性能或碎片问题。
监控linux磁盘I/O性能,关键在于找出哪个进程在频繁读写磁盘,以及磁盘本身的负载情况。iotop 和 iostat 是两个非常实用的工具,分别从进程级别和设备级别的角度来观察I/O行为。
一、用 iotop 查看进程级I/O占用
如果你想知道当前系统中哪些进程正在大量读写磁盘,iotop 是个不错的选择。它类似于 top 命令,但专注于I/O操作。
进入界面后,你会看到类似下面的信息:
TID | PRIO | USER | DISK READ | DISK WRITE | SWAPIN | IO> | COMMAND |
---|---|---|---|---|---|---|---|
1234 | be/4 | www-data | 0.00 B/s | 5.23 M/s | 0.00 % | 0.00 % | nginx: worker |
重点关注 DISK WRITE 和 IO> 这两列。如果某个进程持续占用较高的I/O带宽,说明它可能是性能瓶颈的来源。
? 提示:按 o 键可以只显示有实际I/O活动的进程,方便快速定位问题。
二、用 iostat 监控设备级I/O性能
当你更关心磁盘设备本身的性能表现时,iostat 就派上用场了。它可以展示CPU使用率和磁盘I/O统计信息。
-
安装方法(iostat包含在sysstat包中):
sudo apt install sysstat
-
常用命令:
iostat -x 1 5
表示每秒刷新一次,共刷新5次。
输出示例:
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 23.00 120.00 340.00 600000 1700000
关键指标解释:
- %util:设备利用率,超过80%可能表示I/O瓶颈。
- await:平均每次I/O请求的等待时间(毫秒),数值高说明响应慢。
- svctm:实际服务时间,理想情况下应远小于 await。
? 如果你发现某块磁盘的 %util 持续接近100%,那就要检查是哪个进程在频繁访问它,这时候可以结合前面提到的 iotop 来进一步排查。
三、常见场景与应对建议
-
突发性I/O高峰
- 现象:iostat 中磁盘 util 突然飙高,系统响应变慢。
- 应对:用 iotop 找出具体进程,查看是否为备份、日志滚动等定时任务引起。
-
长期高I/O负载
- 现象:磁盘 util 长时间高于70%以上。
- 应对:考虑优化程序逻辑,减少不必要的磁盘读写;或升级存储硬件(如换成SSD)。
-
I/O等待过高但吞吐不大
- 现象:await 高但 kB_read/s 或 kB_wrtn/s 不大。
- 应对:可能是磁盘性能本身有问题,或者文件系统碎片多,需要做fsck或更换硬盘。
基本上就这些。掌握好 iotop 和 iostat 的使用,能帮助你快速定位Linux系统的I/O性能问题。不复杂但容易忽略的是,要根据具体场景灵活搭配这两个工具,才能看得更清楚。