务器CPU长期跑满,会直接造成网站加载缓慢、502报错、SSH连接卡顿、请求超时,是建站运维里非常常见的故障。遇到CPU高占用不要直接重启机器,优先按「查看进程→定位原因→针对性处理」的思路排查,下面给一套完整实操流程。

一、先查看CPU占用,定位占用高的进程
登录服务器SSH,使用下面命令查看负载和进程。
1.top命令(最常用,实时刷新)
top
按P,按CPU使用率排序;按M按内存排序;Shift+W可以保存配置。重点看%CPU这一列,记下占用高的进程名称、PID。
2.htop(更友好,需要安装)
#CentOS
yuminstallhtop-y
#Ubuntu
aptinstallhtop-y
htop
3.查看系统平均负载
uptime
负载数值长期大于CPU核心数,说明CPU已经过载。
4.查看单个进程详情
ps-aux|sort-k3-nr
二、CPU高占用常见原因分类
1.网站程序与数据库问题
-MySQL/MariaDB:慢查询、索引缺失、大表全表扫描,SQL疯狂消耗CPU;
-PHP-FPM:并发请求太多、网站被爬虫疯狂抓取、恶意访问;
-程序bug:循环死代码、插件冲突、主题代码冗余(WordPress居多);
-缓存缺失:没有Redis/OPcache,每次访问都要动态解析、查询数据库。
2.攻击与恶意访问
CC攻击、恶意爬虫、扫描器、爆破脚本持续请求服务器,大量无效请求挤占CPU资源。很多时候看起来是网站进程占用高,实际是流量攻击。
3.定时任务、后台程序占用
备份脚本、日志统计、爬虫采集、监控脚本在固定时间批量执行,容易出现定时CPU冲高。
4.系统本身与异常进程
挖矿木马是高危情况:陌生不知名进程持续占满CPU,特征是进程名字奇怪、kill之后自动重启。
还有Nginx日志切割、日志量巨大、系统内核异常等情况。
三、分场景处理方案
场景1:MySQL占用CPU高
1.开启慢查询日志,找出耗时SQL;
2.给数据表添加索引,优化查询语句;
3.限制最大连接数,调低并发;
4.增加缓存,热点数据放到Redis,减少数据库查询。
场景2:PHP-FPM占用高
1.安装OPcache,加速PHP代码;
2.调整php-fpm进程数量,不要设置过大;
3.封禁恶意爬虫,Nginx配置User-Agent拦截;
4.清理无用插件,更换轻量化主题。
场景3:疑似CC攻击、恶意访问
1.Nginx配置限流,限制单IP访问频率;
2.开启CDN,隐藏源站IP,过滤攻击流量;
3.防火墙封禁恶意IP;
4.高价值业务考虑升级高防。
场景4:发现挖矿病毒
不要简单kill进程,病毒会自动拉起。
1.查找定时任务、异常启动项;
2.查杀木马,清理恶意脚本;
3.排查服务器漏洞,修补弱口令、程序漏洞;
4.必要时备份数据重装系统。
四、快速临时缓解办法
1.停止占用过高的进程(谨慎操作,避免业务中断)
kill-9进程PID
2.临时关闭不必要的定时任务;
3.重启php-fpm、mysql服务;
4.开启CDN分流静态资源。
提醒:kill只是临时降压,根源问题不解决,CPU很快再次跑满。
五、长期优化预防手段
1.做好监控:配置CPU告警,负载高第一时间收到通知;
2.合理使用缓存:Redis、OPcache、Nginx静态缓存;
3.图片、静态资源放对象存储、CDN;
4.定期优化数据库,清理冗余数据;
5.限制爬虫,做好访问频率控制;
6.配置预留性能余量,如果业务持续高负载,直接升级CPU核心。
六、常见避坑
-不要一看到CPU高就直接重启服务器,丢失排查线索;
-负载高不等于被攻击,大部分建站服务器是SQL慢查询、爬虫导致;
-1核2G这类低配机器,本身性能上限低,流量稍微上涨就容易CPU打满;
-排查的时候区分:是瞬时冲高,还是全天持续高占用。瞬时冲高大概率是定时任务,持续高占用优先查程序、数据库。
总结
排查CPU占用过高的顺序:`top/htop定位进程→判断是数据库/PHP/攻击/木马→针对性优化`。建站服务器优先排查慢SQL和爬虫;出现陌生进程优先排查挖矿;如果业务流量持续上涨,优化到瓶颈后,只能升级服务器配置。
文章名称:《服务器CPU占用率过高怎么办?》
文章链接:https://www.idc500.com/12217.html
【声明】:优云主机测评 仅分享信息,不参与任何交易,也非中介,所有内容仅代表个人观点,均不作直接、间接、法定、约定的保证,读者购买风险自担。一旦您访问优云主机测评 ,即表示您已经知晓并接受了此声明通告。
【关于安全】:任何 IDC商家都有倒闭和跑路的可能,备份永远是最佳选择,服务器也是机器,不勤备份是对自己极不负责的表现,请保持良好的备份习惯。