最近有个同行线上遇到一个很典型的问题:磁盘IO突然飙升,但CPU、内存都很正常。
最近有个同行线上遇到一个很典型的问题:磁盘IO突然飙升,但CPU、内存都很正常。

这种问题,说实话,比CPU打满还恶心—— 因为你第一眼根本不知道是谁在干坏事。排查过程也很简单。
1. 异常现象
看监控发现:
前期:IO基本稳定在低位后期:突然周期性飙高(接近30MB/s)持续时间:长达数小时特征很明显:
不是瞬时波动是持续 + 有规律抖动这种情况,一般就三类原因:
批处理任务(cron)日志疯狂写入程序Bug死循环写磁盘2. 问题定位
先用 iostat 判断是否真的是磁盘问题。
直接上命令:
iostat -x 1
关键看这几个指标:
%util -> 是否打满await -> IO等待时间tps -> IO请求数rkB/s、wkB/s -> 读写速度
当时看截图IO确实在持续发生,但是iowait不高,util未打满。
说明什么?
不是磁盘性能瓶颈,而是“有程序一直在写”。
3. 最终定位
90%的IO问题都可以用iotop进行定位,这个命令有些发行版可能没有预安装,需要手动用yum安装一下。
iotop -o
参数解释:-o:只显示有IO的进程。
当时排查的时候没有进行截图,主要输出主要下面:
PID USER DISK READ DISK WRITE COMMAND2526 root 0.00 B/s 5.00 MB/s java xxx.jar
看完输出就可以判断问题。
不是系统问题,是代码问题。前两天更新了代码,代码出现了Bug导致,持续占用写IO
4. 解决问题
通过ps找到具体进程后:
ps -ef | grep 2526
直接kill掉进程,接着让开发修复代码死循环,限制日志输出频率。
再次上线了新代码后,IO恢复正常状态:

