先看 iostat -x 1 的 %util 和 await:若 %util 接近 100% 且 r/s/w/s 很低,说明请求排队严重;await > 50ms 且远大于 svctm,表明设备响应慢或队列积压;nvme 盘需重点关注 avgqu-sz 和 r_await/w_await。
确认磁盘 I/O 是否真瓶颈
别急着查内核参数或重装驱动,先看 iostat -x 1 输出里 %util 和 await 是否持续高位。如果 %util 接近 100% 但 r/s/w/s 很低,说明请求排队严重;若 await > 50ms 且 svctm(已弃用,仅作参考)远小于它,大概率是设备响应慢或队列积压。注意:NVMe 盘的 %util 意义弱化,得重点看 avgqu-sz 和 r_await/w_await。
区分是随机 I/O 还是顺序 I/O 下降
用 iotop -o -a 找出高 IO 的进程,再结合 lsof -p $PID 看它在读写哪些文件;接着用 blktrace -d /dev/nvme0n1 -w 10 -o - | blkparse -i - 抓取原始请求模式——R(read)和 W(write)后面带 Q(queue)还是 M(merge)多,能判断是否大量小块随机访问。数据库、Elasticsearch 日志写入、容器镜像拉取常触发这类模式,而备份工具(如 rsync --whole-file)或大文件拷贝则倾向顺序 I/O。
检查底层存储路径是否存在隐性限速
常见却被忽略的点: