磁盘IO打满怎么办?区分IO、空间、CPU与内存问题
磁盘IO繁忙、空间满、内存紧张和CPU繁忙都可能伴随卡顿,但处理方向不同。先记录异常时间、时区和受影响业务,在卡顿发生时采样,再与同一实例正常时段比较。单次峰值或跑分不能直接证明硬件故障,也不足以决定升级哪种资源。
先取得卡顿时的基础数据
Linux:在服务器终端分别执行以下只读命令,top按q退出。记录输出时间,并核对网站、数据库或远程操作是否同时变慢。
top
free -h
df -h
df -i
| 检查项 | 怎样判断 | 下一步 |
|---|---|---|
| CPU | 在top连续观察占用较高的进程,并记录进程名称;一个瞬时百分比或load数值不能单独说明原因。 | 对照并发请求、压缩转码、编译、定时任务和近期发布;CPU高的进程未必也是主要磁盘读写来源。 |
| 内存 | free的available估算可供新应用使用而不必交换的内存。free较少不一定不足;Swap已用量也不等于此刻正在频繁换页。 | 若available持续偏低且应用延迟、换页活动同步增加,继续核对服务内存增长、缓存、并发和限制。 |
| 空间与inode | df -h看容量,df -i看inode;找到业务目录对应的挂载点。容量有余量时,大量小文件仍可能耗尽inode。 | 确认增长来自日志、上传、缓存还是备份,核对保留要求,再安排轮转、归档或清理;不要直接删未知目录或数据库文件。 |
Windows:打开任务管理器,按CPU、内存排序识别进程,在“性能”中观察趋势;需要查磁盘活动时打开资源监视器,对照进程、读写和响应时间。另查业务所在卷的可用空间。保留进程名称和异常时刻,不只截总占用百分比。
Linux:用iostat区分IO等待与设备负载
如果系统已安装sysstat,在卡顿期间执行:
iostat -x -y 1 5
此例每隔1秒采样,共5份报告;-y跳过默认首份“自开机以来”的统计。命令不存在或版本不支持时,保留现有监控和工具版本,不必在故障高峰临时安装或改系统。
await或分列的r_await、w_await是IO请求平均完成时间,包含排队与服务时间,通常以毫秒显示。aqu-sz表示平均请求队列长度,需和同一设备的读写量、请求数、等待时间及业务响应一起看。%util不是空间占用率。串行设备接近100%可提示饱和;现代SSD、RAID等可并行处理请求,不能统一用这一列判断性能上限,更不能直接判断磁盘损坏。
若持续读写时等待和业务延迟一起升高,继续查读写来源;若只在额外跑分时升高、结束后恢复,先停止不必要的测试并区分测试负载与真实业务。没有适合所有云盘和业务的固定毫秒阈值。
Linux:定位发起读写的任务
已安装sysstat且有相应权限时,可在同一异常时段执行:
pidstat -d 1 5
按PID、Command识别任务,对照kB_rd/s和kB_wr/s寻找活跃读写,再与备份、数据库、日志和同步任务核对。默认只列活跃任务,未出现某进程不证明它没有IO;工具不可用时不必临时安装。
确认业务原因后再调整
将采样时间与慢请求、日志写入、批处理、备份和流量变化对齐。确认责任服务、业务影响和回退方式后,选择优化请求、降低并发或错开重任务等方案,并复查同一组指标。不要把杀进程、清缓存、删文件或重启数据库当作通用第一步。
正常业务下仍持续受限时,先区分需要的是CPU、内存、IOPS、吞吐还是容量,再评估优化、拆分或升级。
何时提交工单
无法登录、出现文件系统只读或设备异常,或持续卡顿仍定位不清时,可提交工单,提供:
- 实例标识、地区、操作系统与工具版本,异常时间和时区。
- 受影响业务、持续时长、近期变更,以及正常和异常时段的多组采样。
- 已确认的进程、备份或数据库任务,已做调整及结果。
只附相关日志片段,遮去密码、令牌和客户信息。资源截图有助于定位,但不能独立确认宿主机或硬件责任。
相关文档:查看CPU、内存与磁盘用量 · 同配置实例有效对照