直接答案:先确认用户慢是否与磁盘延迟同一时间发生,再用iostat看设备利用、await、队列和吞吐,用pidstat/iotop找进程,最后把PID追到文件、SQL、日志或任务。iowait高说明CPU在等待块IO,但低iowait也不能证明磁盘正常;高并发、异步IO和多核会改变比例。不要在生产盘盲跑写压测或直接删除大文件。
本文于 2026 年 9 月按官方文档核对。命令和配置只展示判断方法,不代表可在任意生产环境直接复制;发行版、云平台、网络拓扑和业务写入不同,执行前必须确认对象、权限、备份和带外恢复入口。
专属资产:设备—进程—业务三证据表
| 现象/阶段 | 要判断什么 | 需要的证据 | 安全边界 |
|---|---|---|---|
| await/p99高 | 单次IO等待长 | 设备与云盘指标 | 先查饱和/故障/限额 |
| 队列持续增长 | 到达量超过处理量 | avgqu与应用积压 | 限并发或扩性能 |
| 吞吐高延迟稳 | 大块顺序任务 | 备份/复制时间线 | 调度到低峰 |
| IOPS高吞吐低 | 小块随机访问 | 数据库/小文件 | 优化索引与缓存 |
| 写入低但盘忙 | 刷盘/快照/底层活动 | fsync、云监控、宿主 | 保留证据联系平台 |
这张表要求每个结论至少有两个相互独立的证据,例如“服务监听+外部连接”“设备延迟+业务耗时”“备份文件+隔离恢复”。单一控制台绿灯、单次截图或一个User-Agent都可能误导,不能作为完成依据。
为什么常见的一键处理容易失败
运维问题通常跨越控制台、操作系统、应用和外部依赖。重启、全放行、清缓存或重装会改变多个变量,并可能清掉最有价值的现场。正确顺序是先定时间线和影响范围,再确认最靠近故障的证据层,最后做可回滚的最小动作。
对于有数据库、订单、表单、队列或用户上传的站点,还要先判断当前是否仍在写入。回滚旧快照、切回旧主机或恢复旧数据库前,必须处理变更期间的新数据;否则技术状态恢复了,业务数据却可能倒退。
六步安全执行流程
1. 确认对象与基线
记录故障起止、受影响接口、p95/p99和5xx,再用vmstat/iostat连续采样;单张%util截图无法证明根因,现代并行设备也不宜只靠100%利用率判断。
每一步都要写明执行时间、操作者、原始结果和预期;涉及删除、覆盖、网络规则或服务停止时,先确认备份与回滚命令。
2. 保留恢复入口
查看每个块设备的读写量、IOPS、await、队列和错误,映射到实际挂载点、LVM、RAID或云盘;避免把系统盘和数据盘指标混在一起。
每一步都要写明执行时间、操作者、原始结果和预期;涉及删除、覆盖、网络规则或服务停止时,先确认备份与回滚命令。
3. 取得直接证据
用pidstat -d、iotop或cgroup指标找持续读写进程,记录PID、用户、启动时间和命令;再用lsof、数据库状态或应用日志定位文件与请求。
每一步都要写明执行时间、操作者、原始结果和预期;涉及删除、覆盖、网络规则或服务停止时,先确认备份与回滚命令。
4. 只做最小变更
按时间线检查备份、压缩、日志轮转、数据库checkpoint、快照、容器层和临时文件。一次只暂停可安全中断的任务,不要直接kill数据库。
每一步都要写明执行时间、操作者、原始结果和预期;涉及删除、覆盖、网络规则或服务停止时,先确认备份与回滚命令。
5. 验证业务与副作用
短期可限并发、错峰、降低日志噪声或增加缓存;长期应优化SQL/索引、批量写入、数据布局,或选择满足延迟和IOPS的存储。
每一步都要写明执行时间、操作者、原始结果和预期;涉及删除、覆盖、网络规则或服务停止时,先确认备份与回滚命令。
6. 重启或跨峰复验
修复后用相同负载重跑,比较设备p95/p99、队列、应用尾延迟和错误;跨过一次备份或高峰周期,并确认没有把数据持久性换成速度。
每一步都要写明执行时间、操作者、原始结果和预期;涉及删除、覆盖、网络规则或服务停止时,先确认备份与回滚命令。
不应直接照做的五种处理
- 只看iowait百分比
- 生产数据库盘直接fio写测
- kill最高IO进程不查业务
- 关闭fsync换取表面速度
- 清日志导致调查证据丢失
这些做法并非永远错误,而是缺少适用条件。若确需执行,应在变更单中写清目标、影响范围、停止阈值、备份位置、回滚命令和预计恢复时间;高风险动作先在副本或小流量上演练。
回滚触发与数据边界
出现核心写入失败、持续5xx、管理员入口丢失、数据校验不一致、尾延迟越过停止阈值或监控失明时,应停止继续扩大变更。回滚前确认新旧环境各自产生了哪些写入,保留日志和配置差异;回滚后用相同请求和同一时间窗口重测,而不是只看首页恢复。
如果故障根因尚未确认但必须先恢复服务,可以采用限流、摘除单节点、恢复上一配置或临时切流等缓解措施,并明确它只是临时处置。恢复后仍要完成根因分析和复发验证,不能把“重启后正常”写成最终原因。
验收清单
- [ ] 设备与挂载映射正确
- [ ] 连续采样覆盖故障
- [ ] 高IO进程可解释
- [ ] 业务时间线一致
- [ ] 无磁盘错误
- [ ] 数据持久性未削弱
- [ ] 同负载延迟改善
- [ ] 高峰和备份可共存
验收应由另一位维护者按记录复现至少一项关键检查,并覆盖重启、真实高峰或等价受控负载。所有失败项都记录实际值与时间,不使用“基本正常”“应该没问题”作为关闭条件。
相关资料与隔离测试入口
站内可继续参考磁盘满清理、CPU100排查、硬盘容量与IOPS。需要搭建副本验证配置时,可查看美国轻量云和美国弹性云服务器的实时规格;先确认库存、价格和适用条件,不把测试环境当备份或生产容灾。
常见问题
%util 100%一定是磁盘满负荷吗?
对传统单队列设备常是重要信号,但并行存储与统计实现会影响解释。应同时看await、队列、吞吐、IOPS和应用延迟。
iowait低就能排除磁盘问题吗?
不能。大量CPU工作、异步IO或多核会稀释比例,单个关键请求仍可能被高尾延迟拖慢。
加内存能解决IO高吗?
缓存不足导致重复读时可能有效,但同步写、备份、扫描或设备故障未必改善。先确认读写来源。
怎样安全使用fio?
只在隔离盘或专用测试文件上,声明块大小、读写、iodepth和runtime;不要对含生产数据的裸设备执行破坏性测试。
数据库IO高应该先加盘吗?
先查慢SQL、索引、全表扫描、临时表和checkpoint。若优化后真实工作集仍超过存储能力,再扩性能或拆分。