Linux 服务器 CPU 飙高怎么办?5 分钟定位问题
CPU 100% 了,别慌。按这 5 步来,5 分钟内找到元凶。
第一步:看整体情况
top看看哪个进程的 %CPU 最高。按 P(大写)可以按 CPU 使用率排序。
第二步:确认是不是负载真的高
uptime看 load average 的三个值,分别对应 1 分钟、5 分钟、15 分钟的平均负载。如果 1 分钟远高于 15 分钟,说明是刚发生的。
第三步:定位具体线程
找到高 CPU 的 PID 后,看它的线程:
top -H -p <PID>或者用:
ps -Lp <PID> -o pid,tid,%cpu,comm第四步:看系统调用
如果是 Java 或 Python 应用,用 strace 看它在干什么:
strace -p <PID> -c -S time按 Ctrl+C 停止后能看到各系统调用的耗时分布。
第五步:看磁盘和网络
CPU 高有时候是 IO 在等导致的:
iostat -x 1如果 %iowait 很高,问题可能不是 CPU 不够,是磁盘太慢。
ss -tpln连接数异常也可能导致 CPU 飙升,比如被 CC 攻击了。
快速排查脚本
#!/bin/bash
echo "=== CPU 占用 TOP 10 ==="
ps aux --sort=-%cpu | head -11
echo "=== 负载 ==="
uptime
echo "=== 内存 ==="
free -h
echo "=== IO ==="
iostat -x 1 2常见的 CPU 高原因
- 死循环:应用代码里有个 while(true) 没退出条件
- 大量请求:被攻击或者业务突然暴增
- 频繁 GC:Java 应用内存不够,GC 线程满负荷
- 进程卡住:数据库连接池耗尽,线程不断重试
- 挖矿病毒:看看有没有可疑进程,留意陌生的二进制名
先找到哪个进程、哪个线程、它在调用什么,然后再决定是重启、修代码还是加机器。不要一看 CPU 高就重启,那是临时止疼不是治病。













