报错是这么冒出来的。监控面板上磁盘使用率长期百分之百,iostat -x 里读延迟只有零点三毫秒,业务却反馈偶发卡顿,CPU 和内存都不紧张。
把日志和配置对完,能解释这个现象的基本就这几处。云盘是网络盘,那个百分比按请求排队计算,不代表物理磁头饱和。另一种情况是小块随机 IO 把队列打满了,但每一次响应其实都很快。
另外,压测时队列深度不足,根本没测出设备的真实上限。
同时看使用率、延迟和队列深度
iostat -x 1 5
定位 IO 来源进程
pidstat -d 1 5
再往下用业务真实块大小重测
fio -name=r -rw=randread -bs=16k -iodepth=64 -direct=1 -filename=/data/t
等前面都确认过,再确认设备队列深度设置
cat /sys/block/vdb/queue/nr_requests
别只看报错消失,验证要多做一步。定位到具体进程后限流或者改造,iostat 的队列长度与延迟回到平稳区间,业务卡顿消失。
补一句。虚拟化环境里使用率这个指标经常失真,判断瓶颈更该看延迟和队列深度,只盯一个数字很容易误判成磁盘不行。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。