JP Server CPU 100% / Process Hang: 6-Step Fix
发布时间:2026-10-15
问题一:CPU 持续 100% 满载
- 表现:
top显示%CPU(s)接近 100%,网站响应极慢,SSH 登录都卡。 - 可能原因:① 某进程死循环;② 大量并发请求打满 PHP-FPM/Node;③ 挖矿病毒;④ 编译/转码任务。
- 排查步骤:
1.top -c按 P 排序,找 CPU 最高的进程;
2.ps aux --sort=-%cpu | head确认;
3.strace -p看进程在做什么。 - 快速修复:
1. 非必要进程直接kill -9;
2. 限频 Nginx/PHP-FPM:pm.max_children调到 CPU 核数 × 2;
3. 排查挖矿:ps aux | grep -E 'miner|xmrig|cryptonight',杀掉并清理计划任务。
问题二:负载高但 CPU 不高(IO 等待)
- 表现:
uptimeload average 很高,但top显示 CPU 大部分是%wa(IO wait)。 - 可能原因:磁盘 IO 瓶颈(慢查询、日志狂写)导致进程等待。
- 排查步骤:
iostat -x 1 5看%util和await。 - 快速修复:
1. 优化慢查询(加索引);
2. 日志写独立盘;
3. 升级 NVMe。
问题三:进程卡死无法 kill
- 表现:
kill -9无效,进程处于D状态(不可中断睡眠)。 - 可能原因:① 等待磁盘 IO(NFS 挂载断了);② 内核 bug;③ 硬件故障。
- 排查步骤:
1.ps aux | awk '$8 ~ /D/'找 D 状态进程;
2.cat /proc/看内核栈;/stack
3.dmesg看是否有 IO 错误。 - 快速修复:
1. 等待 IO 完成(如果是 NFS,恢复网络即可);
2. 强制卸载 NFS:umount -f;
3. 终极方案:重启服务器(D 状态无法通过 kill 结束)。
问题四:内存耗尽(OOM)
- 表现:
dmesg | grep -i oom显示 Out of memory,进程被内核杀掉。 - 可能原因:① PHP/Java 内存泄漏;② 缓存配置过大;③ 突发流量。
- 排查步骤:
1.free -h看内存;
2.ps aux --sort=-%mem | head找吃内存的进程;
3. 看 OOM 日志确认被杀的进程。 - 快速修复:
1. 加 swap(8–16GB)应急;
2. 调小 PHP-FPMpm.max_children、Java-Xmx;
3. 长期:加内存或优化代码。
问题五:网络连接数暴增
- 表现:
ss -s显示连接数数万,TIME_WAIT占比高。 - 可能原因:① 被 CC 攻击;② 应用没复用连接;③ 短连接过多。
- 排查步骤:
ss -ant | awk '{print $1}' | sort | uniq -c。 - 快速修复:
1.sysctl -w net.ipv4.tcp_tw_reuse=1复用 TIME_WAIT;
2. Nginx 开启keepalive复用连接;
3. 上 7 层防护挡 CC。
问题六:如何预防资源耗尽?
- 监控:CPU >80%、内存 >85%、load > 核数 告警。
- 限流:Nginx
limit_req限频,防止突发流量打满。 - 资源限制:systemd
LimitCPU/LimitNOFILE限制单进程。 - 自动化:配置告警自动扩容或重启异常进程。