本文祥助分享一下,处理排查和解决因mysql和php-fpm大量消耗CPU算力,导致CPU核心全部跑满的一个故障。因负载100%满载,从而导致服务器宕机,网站无法打开或非常缓慢,从排查到解决的这个完整步骤,供大家遇到类似的问题做个简单的小参考。
问题表现
服务器参数:AMD EPYC Processor (with IBPB) * 1,带有1个物理CPU,8个物理核心,8个逻辑核心;24G的Ram运行内存,Nvme固态硬盘。
这是一台全新安装Rocky 9系统的纯净VPS,硬件性能属于很不错;端口安全,密钥对登录等SSH端的防护措施均已优化,网站未运行时CPU和内存负载一切正常,但是只要启动网站后,负载很快飙升到100%,吃满了CPU的算力。因为CPU运行堵塞,导致网站打不开或速度非常缓慢,服务器自身的访问也速度有些许影响。

一般来说,出现CPU满载的问题,存在以下几个可能的主要原因:
- 网站被打:也就是我们常说的网站/服务器被盯上了,被人恶意攻击(DDOS等)
- 网站被黑:网站自身存在程序、插件漏洞,未及时更新修复,导致源码被篡改,或被植入恶意 JS、PHP 后门脚本;如 WordPress类 开源生态及第三方插件若长期不更新,极易被利用漏洞入侵。
- 服务器漏洞:服务器未及时升级安全补丁或系统版本太老等导致被黑
- 其他原因:网站提供了视频,文件下载,未配置CDN;若出现大量访客进行资源下载,也有几率导致短暂性的CPU负载飙升
日志分析
当遇到故障表现的时候,我们第一时间先排查日志log,因为通过日志可以去大概分析和挖掘问题的产生原因和故障锚点。服务器的类型是云VPS,配置有宝塔面板,所以我们可以使用宝塔自带的日志收集分析模块进行初步的排查:
流量分析:打开网站-日流量-分析报表,通过分析图可以看出,网站从上线后不到1天,请求数高达138574,这大大的超过了一个正常网站的数据请求数量,日流量也在1天内达到了3G以上。从这个数据表现可以大概判断,网站是被恶意攻击了。

日志分析:判断大概是网站本身的问题,接下来打开网站的日志log,在宝塔左侧菜单-日志-网站-下拉框选择网站。可以通过日志发现存在非常多的filter_color 参数的请求,通过/categoria/xxx/?filter_color=xxx 这种带筛选参数的 URL变体产生了大量的额外查询负载,其中有些IP疑似来自AI bot等,正是因为它产生了大量的CPU资源消耗。

可以通过日志发现存在非常多的filter_color 参数的请求,通过/categoria/xxx/?filter_color=xxx 这种带筛选参数的 URL变体产生了大量的额外查询负载,其中有些IP来自AI bot(Amazonbot,facebookcrawler)等。
进程分析:在终端或xshell执行top命令,可以发现mysql和php-fpm消耗了大量CPU资源,而这也就是导致CPU满载的原因。

故障解决
大概问题定位到了,这些对color的动态url的爬取,包括来自facebook,amazon的crawer,正是因为它们产生了大量的CPU资源消耗。B2B的站点不需要这些对颜色不同变体url的抓取,所以我们可以对其进行403处理。
我们需要对filter_color 参数的请求进行拦截,让它在服务器端层面就直接返回403状态,不传递到网站层面。所以我们需要将拦截规则添加到Nginx,而不是添加进Wordfence这类插件,直接从服务器端源头进行拦截,相对更彻底。
解决步骤:
Nginx拦截:打开网站设置-配置信息(网站的配置文件,默认路径在/www/server/panel/vhost/nginx/你的域名.conf),在server的段内添加这句代码:
# 拦截带 filter_color 参数的请求
if ($query_string ~* "filter_color=") {
return 403;
}
这段代码会对查询filter_color的参数请求直接返回403状态,从而不传递到下层网站响应,从源头阻断这类数据请求量。

Wordfence优化:因站点是Wordpress CMS搭建的,可以配置wordpfence,启用Firewall防火墙模块后,将Rate Limite从无限改为有一定闸门上限的数值。

验证状态
返回监控报表和服务器CPU状态,查看处理器的负载情况,可以看到从祥助设置解决后2小时,CPU负载一直在10%以内正常,运行状态通畅,波动曲线也完全降下来了。


至此这个CPU负载满载宕机问题得到了解决,祥助这篇文章分享的思路可供参考,主要核心是通过分析网站日志挖掘大概问题所在.再去查看网站日志,会发现对这条filter_color的请求记录,末尾都会带403状态,如代码所示
[10/May/2026:20:26:47 +0800] "GET /categoria/tazas-para-sublimar/ceramicas/?filter_color=negro,azul-mediano,naranja,rojo-violeta,amarillo-dorado,azul-real,amarillo HTTP/2.0" 403
这个案例的出现,是因为这个站客户以前他找服务商建站的时候,使用woocommerce这类电商程序做的B2B产品页面,添加了颜色SKU的呈现。B2B站点如果使用woo做产品系统,建议可以不用展示颜色属性,对B2B来说不如在后面详情区域做结构或图片.
可以在robots.txt将对颜色参数这种动态url的请求设置为disallow,告诉搜索引擎「不要收录这些页面」:
Disallow: /*filter_color=
这个也不用担心影响SEO,因为被拦截的是:/categoria/xxx/?filter_color=xxx ,而这种带筛选参数URL搜索引擎正常抓取的是:/categoria/xxx/这种不带参数的主分类页
问题的产生原因和解决办法是多种多样,分析问题,推导原因,推导故障,大家可供参考,灵活运用。

