服务器CPU突然飙到100%怎么办?一次真实排查过程记录
最近在看服务器状态的时候,遇到一个比较典型的问题:CPU突然异常升高。
当时并不是慢慢上涨,而是直接飙到接近100%,网站访问也开始明显变慢。
这类问题如果不及时处理,很容易影响整站稳定性,所以我第一时间做了排查。
一、问题出现的具体表现
当时的情况大概是这样:
-
网站访问变慢,但没有报错
-
后台还能打开,但响应延迟明显
-
SSH登录略有卡顿
-
服务器负载明显升高
第一反应不是重启,而是先看“到底是谁在占资源”。
二、进入服务器查看CPU状态
我先用最基础的命令查看:
top
可以看到CPU已经接近100%,而且是持续状态,不是瞬间波动。
重点是:
👉 不是单一峰值,而是持续占用
这说明不是短时间请求,而是某个进程在“卡住循环执行”。
三、定位具体占用进程
继续在 top 里面按 CPU 排序后,发现一个异常点:
-
有一个PHP相关进程长期占用CPU 70%+
-
另一个辅助脚本进程也在持续运行
这里就开始有方向了。
说明问题不在系统本身,而在某个任务或脚本执行异常。
四、进一步追查来源
我顺着进程PID查了一下:
ps -aux | grep php
发现这个进程并不是网站正常访问产生的,而是:
👉 定时任务触发的脚本
然后我又检查了定时任务:
crontab -l
发现有一个日志处理任务,每分钟执行一次。
五、真正的问题原因
最后定位下来原因其实比较典型:
👉 日志文件体积过大
👉 定时任务每次都要重新扫描处理
👉 执行时间 > 间隔时间
👉 任务叠加后CPU被持续占用
简单说就是:
任务还没跑完,下一次又开始了,导致无限叠加。
六、紧急处理步骤
当时我做了几个操作来快速恢复:
1. 结束异常进程
kill -9 PID
2. 暂停定时任务
crontab -e
先注释掉相关任务
3. 清理异常日志文件
删除了过大的日志文件,减少处理压力
4. 重启相关服务
systemctl restart php-fpm
七、恢复结果
处理完成后大概1分钟内:
-
CPU从100%降到20%左右
-
网站访问恢复正常
-
SSH延迟消失
-
服务器负载恢复稳定
八、这次问题的核心经验
这次问题其实不是性能问题,而是一个很典型的情况:
👉 “定时任务 + 日志堆积 + 没有限制机制”
很多人遇到CPU高都会第一时间怀疑:
-
被攻击?
-
配置不够?
-
服务器不行?
但实际上很多时候是:
自己的脚本在“重复消耗资源”
九、后续我做的优化
为了避免再次出现类似问题,我做了几个调整:
-
日志按天拆分
-
定时任务增加执行间隔
-
限制脚本执行时间
-
定期清理历史日志文件
📌 总结一句话
CPU突然飙高,不一定是外部攻击,大多数情况是:
👉 内部任务失控或数据堆积导致的资源循环占用