在生产环境中,服务器 CPU 突然飙高 是非常常见的问题。
常见现象:
网站访问变慢
接口响应超时
服务器 Load 很高
CPU 使用率 90%+
很多人第一反应就是 重启服务器,但这其实是最不专业的做法。
今天分享一套 完整的 Linux CPU 高排查流程,基本可以解决 90% 的问题。
一、先确认 CPU 是否真的高
登录服务器后,先查看 CPU 使用情况:
重点关注:
例如:
含义:
如果:
说明 CPU 基本被占满。
二、找到占用 CPU 的进程
使用 top 按 CPU 排序:
或者:
ps-eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
输出示例:
PID CPU COMMAND1234 95% java2345 60% python
找到占用 CPU 的进程。
三、查看进程的线程占用
很多时候 CPU 高是 某个线程导致的。
查看线程:
例如:
输出:
说明线程 5678 占用 CPU。
四、定位代码问题(Java / Python)
如果是 Java 程序,可以继续定位。
把线程 ID 转成 16 进制:
例如:
然后查看 Java 线程:
就能看到具体代码。
五、查看系统 Load
CPU 高时要同时看 Load Average。
查看:
输出示例:
load average: 8.23, 7.10, 6.50
如果服务器 CPU 是:
建议 Load:
如果:
说明系统过载。
六、排查 IO 等待
很多时候 CPU 高其实是 IO 等待。
查看:
重点看:
如果磁盘:
说明 磁盘瓶颈。
七、排查网络问题
如果是高并发服务器,还需要查看网络。
查看连接数:
查看 TCP 状态:
如果出现大量:
可能是:
八、检查是否被攻击
CPU 突然飙高,还有一种常见原因:
被扫描 / 攻击。
查看访问日志:
查看 IP 访问频率:
awk'{print $1}' access.log | sort | uniq -c | sort-nr | head
如果某个 IP 请求量巨大:
可能是爬虫或攻击。
九、常见 CPU 高原因
生产环境最常见的几种情况:
1 程序死循环
例如:
2 SQL 慢查询
数据库 CPU 100%。
3 爬虫流量
大量机器人访问。
4 日志写入过多
磁盘 IO 打满。
5 定时任务
某个 cron 任务异常。
十、应急处理方法
如果 CPU 已经严重影响业务,可以临时处理:
降低进程优先级:
限制 CPU:
或者直接杀掉:
(生产环境慎用)
总结
Linux CPU 高排查流程可以总结为:
1 查看 CPU↓2 找到进程↓3 找到线程↓4 定位代码↓5 排查 IO↓6 排查网络↓7 查看日志
掌握这套流程,基本可以解决 大多数服务器 CPU 问题。