腾讯云2核2G跑WordPress频繁CPU 100%?六步优化让服务器稳如老狗

腾讯云2核2G服务器,宝塔面板部署WordPress,网站跑了一段时间后发现一个问题:偶尔有访客或者搜索引擎爬虫访问时,CPU直接飙到100%,网站打不开,宝塔面板也卡得进不去。

这不是个例,2核2G这个配置跑WordPress确实有点吃力,但完全没必要换配置——优化到位了,稳稳当当跑起来完全没问题。

下面记录一下完整的优化过程,核心思路就是:让服务器少干活。

第一步:开启OPcache — PHP级加速,效果最立竿见影

操作步骤

宝塔面板 → 软件商店 → PHP版本(我用的是8.0)→ 设置 → PHP扩展 → 勾选 opcache → 安装

然后在PHP配置文件中加上这些参数:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=7963
opcache.revalidate_freq=60
opcache.validate_timestamps=0

原理说明

WordPress每次有人访问,PHP都要把主题和插件的代码从头编译一遍。OPcache的作用就是把编译好的字节码缓存起来,下次直接用,不用再编译。

这一招效果最明显,加载时间能直接缩短一半以上,服务器CPU负载肉眼可见地降下来。

第二步:装Redis对象缓存 — 数据查询不碰盘

操作步骤

  1. 宝塔面板 → 软件商店 → 安装 Redis,启动它
  2. PHP版本 → 设置 → 安装扩展 → 勾选 redis
  3. WordPress后台搜索安装 Redis Object Cache 插件,启用
  4. Redis设置里把内存限制改成 80MB,淘汰策略选 allkeys-lru

原理说明

WordPress的文章数据存在MySQL,每次有人访问都要查数据库。Redis把查询结果缓存在内存里,下次同样的请求直接读Redis就行,不用碰MySQL。

实测MySQL的CPU占用从40%直接降到了10%左右,效果相当明显。

第三步:WP Super Cache页面静态化 — 让Nginx直接返回HTML

操作步骤

WordPress后台搜索安装 WP Super Cache 插件,启用后在设置里选 简单模式 就行。

原理说明

95%的访客都是看文章,不会登录也不会评论。WP Super Cache把这些页面直接生成静态HTML文件,存在磁盘上。当访客访问时,Nginx直接把静态文件返回,PHP和MySQL完全不参与。

搜索引擎爬虫也属于匿名访客,这一招能扛住80%的爬虫流量。

第四步:关闭宝塔系统监控 — 别让监控吃掉你的CPU

操作步骤

宝塔面板 → 系统监控 → 关闭

原理说明

说出来你可能不信,宝塔的系统监控本身就是个CPU大户。它一直在后台采集数据、画图表、写日志,占用的资源比很多小网站都多。

关掉之后CPU瞬间轻松一截。当然如果你需要看监控数据,可以偶尔手动查看,不需要一直开着。

第五步:禁用WP-Cron — 别让每次访问都触发定时任务

操作步骤

wp-config.php 文件里加上这一行:

define('DISABLE_WP_CRON', true);

然后在宝塔计划任务里添加一个 Shell脚本 类型的任务,每小时执行一次:

wget -q -O /dev/null https://blog.dadousoft.com/wp-cron.php

原理说明

WordPress有个定时任务系统,比如定时发布文章、检查更新这些。正常情况下,每次有人访问网站,它都会检查有没有任务要执行。

问题就出在这里——每次访问都触发,不管有没有任务都要跑一遍检查逻辑。被人频繁刷新的时候,这就成了CPU杀手。

关掉默认触发方式,改成每小时Cron定时执行一次,精确控制执行次数,CPU瞬间就稳了。

第六步:Nginx限流防刷 — 挡住恶意刷新和爬虫

操作步骤

在Nginx主配置文件(nginx.conf)的 http 块里加上:

limit_req_zone $binary_remote_addr zone=wplimit:10m rate=10r/s;

然后在站点的 server 块里,location / 块内加上:

limit_req zone=wplimit burst=20 nodelay;

最后执行 nginx -t && nginx -s reload 让配置生效。

原理说明

有些恶意爬虫或者扫描工具会高频访问你的网站,正常用户1秒点个几次顶多了,这些工具能一秒发几十个请求。限流就是给每个IP设置一个访问频率上限,超过就返回503。

注意:zone名字千万不能叫 perip,会跟宝塔防火墙冲突,用 wplimit 或者其他名字都行。

附加:2核2G内存分配参考

内存优化跟CPU优化同样重要,下面是各组件的内存占用建议:

组件 建议占用
系统+宝塔 ~300M
MySQL ~400M
PHP-FPM ~600M
Redis ~80M
Nginx ~50M
剩余缓冲 ~570M

PHP-FPM进程数优化(2G内存专用配置)

pm = dynamic
pm.max_children = 15
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 8

进程数不是越多越好,内存就2G,进程开太多反而会导致频繁swap,性能更差。按这个配置来,稳得很。

MySQL优化

宝塔面板 → 数据库 → 设置 → 选择 1-2GB优化方案

MySQL吃内存大户,适当降一降能释放不少资源给PHP用。

总结

核心逻辑就一条——让服务器少干活

  • 静态内容 → Nginx直接返回
  • 动态结果 → Redis/OPcache响应
  • 数据库 → 只服务必要写操作
  • 垃圾流量 → 入口拦截

2G内存不是瓶颈,无优化的架构才是。这套组合拳打下来,2核2G的腾讯云服务器跑WordPress稳稳当当,CPU基本维持在20%-30%之间,再也没出现过100%的情况。