VPS出现请求延迟、数据库卡顿或日志写入变慢时,不能只看 top 的load average。磁盘I/O延迟可能来自设备队列、文件系统写回、云盘突发性能耗尽、容器层写放大或单个进程持续刷盘。先做短时、低开销的指标采样,再把设备、进程和业务时间线对齐,才能避免误扩容或误杀进程。
第一步:确认实际设备和采样窗口
lsblk -o NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS
findmnt -t ext4,xfs,btrfs
iostat -xz 1 5
iostat中的 await反映请求从提交到完成的平均等待时间,aqu-sz表示队列长度,%util表示设备忙碌程度。它们应结合设备类型、采样时长和云平台监控解读,不能拿一次采样就下结论。
用vmstat区分CPU等待和I/O等待
vmstat 1 5
pidstat -d 1 5
vmstat里的 wa升高说明CPU有时间在等待I/O,但不等同于某个磁盘已经饱和;pidstat -d可以帮助定位读写量和等待进程。若 wa不高而应用仍慢,应继续检查网络、锁竞争、上游服务和程序自身队列。
读取Linux压力指标(PSI)
cat /proc/pressure/io
cat /proc/pressure/cpu
PSI中的 some和 full描述任务因资源不足而被延迟的时间比例。它能补充“设备忙不忙”之外的系统视角:设备利用率不高但大量任务被写回或内存回收阻塞时,I/O压力仍可能明显。记录采样时间和业务延迟,便于与监控曲线对应。
四种常见现象如何分流
- await与aqu-sz同时升高:更像设备队列积压,检查并发写入、云盘性能额度和突发信用。
- 写入量不大但wa和PSI升高:可能是同步写、日志刷盘、文件系统写回或单次大延迟。
- 单个进程读写异常:检查备份、索引、压缩、日志轮转和临时文件,先确认是否为预期任务。
- 容器内慢、宿主指标也高:检查挂载卷、overlay写放大和多个容器的共同竞争;不要只看容器自己的进程列表。
结合云平台与文件系统信息
VPS通常看不到物理磁盘的SMART详情,云盘突发性能、IOPS上限和共享宿主机状态需要在控制台确认。文件系统方面,可查看挂载选项、错误日志和空间/inode使用率:
df -hT
df -i
findmnt -no TARGET,FSTYPE,OPTIONS /
journalctl -k -b --no-pager | tail -n 200
如果同时出现I/O error、设备重置或文件系统被挂成只读,应优先保全数据并按存储故障流程处理,而不是继续压测。
低风险缓解与验证
在确认业务允许后,可降低非关键备份或批处理的并发,错开定时任务,并为日志、临时文件和数据库设置合理的轮转与保留策略。不要直接删除正在使用的数据库文件,也不要为了掩盖延迟盲目修改内核回写参数。每次只改一个变量,随后重新采样 iostat、PSI、应用P95延迟和错误率。
形成可提交的证据包
向云平台或应用团队反馈时,附上采样时间、实例与挂载点、iostat -xz、vmstat、PSI、进程级读写、云盘监控和业务延迟曲线。脱敏主机名、账号、Token和用户数据,保留请求ID或任务ID用于关联。这样才能判断是云盘配额、宿主争用、文件系统问题还是应用写放大。
磁盘I/O排查的目标不是找到一个“万能阈值”,而是把延迟、队列、压力、进程和业务现象放在同一时间线上。证据充分后,再决定限流、错峰、扩容或迁移。






