CPU/内存/磁盘 IO 爆了:症状、原因、快速处理
远程很卡、网站慢、任务跑不动,不一定是网络问题,常见是 CPU/内存/磁盘 IO 被打满。 本页给出:怎么判断、常见原因、怎么快速止损。
一、典型症状(对照即可)
- CPU 高:SSH/远程桌面输入延迟大,接口响应慢,但网络测速可能正常。
- 内存不足:程序频繁重启/卡死,系统开始大量使用 swap,整体变慢。
- 磁盘 IO 高:打开文件/写日志很慢,数据库慢查询变多,系统 load 很高但 CPU 不一定满。
- 磁盘满:服务异常、写入失败、数据库报错、面板提示空间不足。
二、先用 2 分钟确认是哪一类瓶颈
Linux 执行:
free -h
df -h
iostat -x 1 5
- top:看 %CPU、load、哪个进程占用最高。
- free -h:看 available 是否很低、swap 是否在增长。
- df -h:看磁盘是否接近 100%。
- iostat:看 %util 是否长期接近 100%、await 是否明显偏高。
三、常见原因(按出现频率排序)
1)CPU 被打满
- 程序死循环/异常请求导致线程飙升
- 高并发访问但未做缓存/限流
- 压缩/转码/编译等重任务同时运行
2)内存不足
- 程序内存泄漏、缓存无限增长
- 数据库/Java/Node 等未设置合理内存上限
- 容器/多服务堆在同一台,资源规划不足
3)磁盘 IO 高 / 磁盘满
- 日志暴涨(访问日志/错误日志/业务日志)
- 数据库慢查询、缺索引导致大量读写
- 下载/解压/备份/同步等大量读写任务
- 临时文件/缓存文件长期不清理导致磁盘满
四、快速处理(先恢复业务,再慢慢优化)
ps aux --sort=-%cpu | head
ps aux --sort=-%mem | head
找到占用最高的进程名称,确认是否是你的业务程序、数据库、面板、或异常进程。
- 临时降低并发/限流(应用或网关层)。
- 暂停高负载任务(转码/编译/批处理)。
- 确认是否异常请求导致(看 Nginx/应用日志是否突然暴涨)。
- 重启异常内存进程(先确认是你的业务服务)。
- 给关键服务设置合理内存上限(例如缓存大小、JVM 参数等)。
- 长期建议:升级内存或拆分服务。
du -sh /* 2>/dev/null | sort -h | tail
du -sh /var/log/* 2>/dev/null | sort -h | tail
- 清理无用日志/临时文件,释放空间(谨慎操作,先确认文件用途)。
- 开启日志轮转(logrotate),避免日志无限增长。
- 数据库慢查询:先查慢日志与索引,再考虑升级磁盘/拆分。
五、什么时候需要提交工单
- 确认不是业务进程导致,但资源仍异常(例如磁盘 IO 持续 100% 且无明显读写进程)。
- 实例频繁无故重启/掉盘/只读等异常现象。
- 你无法登录系统,仅能通过控制台看到异常。
工单提交模板(复制填写)
公网IP:
节点/地区:
异常类型:CPU高 / 内存不足 / swap增长 / IO高 / 磁盘满
开始时间:xxxx-xx-xx xx:xx(是否持续:)
top 截图:已附
free -h 截图:已附
df -h 截图:已附
iostat -x 1 5 输出:已附(如可提供)
占用最高的进程:进程名/占用(如已确认)
业务类型:网站/数据库/下载分发/其他(简述)