当服务器后台 CPU 飙到 100%,说明系统的处理器资源被某些进程占满,可能会导致卡顿、服务响应变慢甚至崩溃。处理这类问题要快速定位原因并有序处理,以下是详细应对步骤:
一、第一步:确认问题是否持续
1. 登录服务器查看 CPU 使用情况
Linux:
top # 实时查看 CPU 占用高的进程
htop # 更直观(如安装了)
Windows:
- 打开任务管理器 > 性能 > CPU。
- 查看“进程”页中哪个程序占用率高。
二、第二步:定位是“正常消耗”还是“异常占用”
某个应用服务突然占满 CPU:可能是程序异常、死循环、内存泄露等
多个 PHP、Python、Java 进程拉满:可能是并发量高、没有限流
数据库占用高:可能是SQL 语句未优化、大量连接未释放
僵尸进程或脚本异常运行:可能是无意义循环、资源未释放
被攻击(如 DDoS):nginx、apache、firewalld CPU 占高
三、第三步:处理思路
1. 杀掉高占用进程(短期应急)
ps aux --sort=-%cpu | head # 查看高 CPU 的进程
kill -9 PID # 杀掉异常进程
2. 限制进程资源占用(长期建议)
- 使用nice或cpulimit工具限制占用。
- 使用systemd限制服务CPU资源。
3. 优化程序逻辑
- 查看是否代码死循环;
- 检查缓存是否命中失败;
- 数据库是否存在慢 SQL;
- 日志频繁写入是否引起 I/O 反向拉高 CPU。
四、第四步:检查是否为攻击或异常访问
1. 检查网络连接数
netstat -antp | grep ESTABLISHED | wc -l
2. 检查是否存在异常 IP(访问日志分析)
tail -n 1000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head
3. 加入防火墙屏蔽可疑 IP
iptables -A INPUT -s 攻击IP -j DROP
五、第五步:优化配置
Nginx/Apache:开启缓存、限制并发、优化配置项
MySQL:使用慢查询日志、加索引、减少大查询
PHP:启用OPcache、优化脚本
Java:增加GC日志分析,调优JVM参数
全局:增加swap或物理内存,分布式分担负载
六、最后的手段:重启服务或系统
如果情况持续无法恢复,重启服务是临时救急方法:
systemctl restart nginx
systemctl restart php-fpm
systemctl restart mysql
如果连服务命令都无法执行,可尝试优雅重启服务器。
注意:重启有风险,请确保已备份数据或处于非高峰时段!
小结:服务器CPU占用100%本身不是问题,持续时间长且影响服务才是问题。关键在于及时排查并做好长期预防。