WP Rocket预缓存功能造成VPS服务器资源占用网站慢的解决方法

WP Rocket 是一个非常好用的缓存插件,其中有一个预缓存功能,可以提前将你的一些网页缓存下来,然后用户访问的时候就相当于直接就是静态页面了。小编使用 WP Rocket 已经有一段时间了,但是最近发现网站经常会很卡,有时候甚至比不缓存还卡。查了下响应日志,发现是 WP Rocket Preload 占用了大量资源,直接把 VPS 的 CPU 跑满了。所以本文记录一下遇到类似情况的解决方法。

WP Rocket 导致网站慢排查方法

其实也不一定就是 WP Rocket 导致网站慢,但是如果网站响应特别慢,我们可以登录 VPS,看看到底是什么资源占用比较高,如果看到是 NGINX 或者是 PHP 之类的,那么再登录宝塔面板,看看网站的响应日志。

下面就是网站的访问日志,发现全都是来自本地 IP 的请求,然后请求全都是 WP Rocket/Preload。所以一看就是因为 WP Rocket 预缓存导致的问题。

找到问题之后就是解决问题。

WP Rocket 关闭预缓存方法

其实正确的解决方法应该是看看能不能设置预缓存的频率,或者是每天设置个时间定时预缓存,比如设置到凌晨,深夜。但是找来找去发现 WP Rocket 并没有这个设置选项,只有开启或者不开启预缓存。

无奈之下最后只能先关闭 WP Rocket 预缓存了,关闭之后观察了一阵子,发现确实没有再出现资源占用特别高的情况。

那么有没有更好的解决方法?

WP Rocket 预缓存慢的官方解释

经过进一步查阅 WP Rocket 的官方文档,我们找到了一个关于 WP Rocket 的《Preload is slow, or some pages are not preloaded at all》这个文档。下面翻译摘录相关说明如下。

预加载缓慢或未完成

WP Rocket 的预加载需要很长时间或未完成的可能原因有 2 个:

PHP 执行时间

用于预加载的 PHP 后台进程只能在服务器上 PHP 执行时间允许的情况下运行。PHP 执行时间的常见默认限制是 30 秒;那是允许像 preload 这样的 PHP 脚本运行的时间,在服务器决定它运行时间过长并停止它之前。

一旦 WP Rocket 的预加载过程达到 PHP 执行时间限制,它就会停止。之后它将启动下一批 URL。如果由于某种原因进程没有自动重新启动,我们有一个 cron 会在 5 分钟后触发以重新启动进程。

因此,当有很多 URL 需要预加载时,WP Rocket 会设法在 30 秒内预加载 n 个 URL,然后暂停最多 5 分钟,然后在另外 30 秒内预加载另外 n 个 URL,然后暂停,等等,直到所有 URL 都被预加载。

WP Cron

预加载依赖于 WP Cron,而后者又依赖于 WordPress 中的 PHP 页面加载。这些页面加载可以是后端或前端,但由于 PHP 不在缓存页面上执行,因此对于使用 WP Rocket 的站点,我们主要讨论的是后端活动。

简而言之,如果 WP Admin 上一段时间没有活动,WP Rocket 的预加载将停止触发。

为了使预加载更可靠,建议将 wp-cron 替换为来自服务器的真实 cron 作业。

自我请求被阻止

通过转到工具→站点运行状况检查您站点的 WordPress 站点运行状况工具。在那里您可能会看到相关错误,例如您的站点无法完成环回请求

一些主机不允许托管在其服务器上的站点使用 cURL 连接到自己。这可以防止几个 WP Rocket 功能(例如预加载和关键路径 CSS 生成)失败。

请联系您的主机支持并请求删除该限制(如果它已在服务器中设置)。

以上就是 WP Rocket 给出的一些可能的原因。具体的解决方法在《Preload is slow, or some pages are not preloaded at all》这篇文章里也有提到。

WP Rocket 增加预缓存超时时间

其实感觉比较行之有效的可能是增加预缓存的超时时间。

服务器响应时间慢

常见错误:cURL error 28

启动预加载时,我们的爬虫会尝试访问您的主页或站点地图。它等待 10 秒,如果没有响应,它将停止并且不会预加载任何内容。

要查看您的站点是否会出现这种情况,您可以测试服务器的响应时间。这是通过 cURL 命令完成的(使用 Mac 的终端或 Windows 的 cmd.exe 等应用程序)。输入以下命令,不要忘记将 http://example.com/sitemap.xml 替换为您自己的站点地图 URL、主页 URL 或您看到的错误消息中引用的任何 URL。

curl -o /dev/null -s -w %{time_total}//n  http://example.com/sitemap.xml

如果 URL 的响应时间超过 10 秒,请先尝试为您的站点增加 PHP 内存。

如果这没有帮助,您可以使用下面的帮助插件增加预加载请求的超时时间。

下载 (.zip):WP Rocket | Custom cURL Timeout For Preload Request

至于具体原因可能还是每个人不同,多看看官方文档可能会有帮助。就暂时解决到这一步就感觉差不多了。

搬瓦工推荐方案

温馨提醒 如果您有选择困难症,直接选中间的 CN2 GIA-E方案,季付 $49.99,多达 12 个机房任意切换

方案 内存 CPU 硬盘 流量/月 带宽 机房 价格 购买
CN2
(最便宜)
1GB 1核 20GB 1TB 1Gbps DC3 CN2
DC8 ZNET
$49.99/年 直达
CN2 2GB 1核 40GB 2TB 1Gbps $52.99/半年
$99.99/年
直达
CN2 GIA-E
(最推荐)
1GB 2核 20GB 1TB 2.5Gbps DC6 CN2 GIA-E
DC9 CN2 GIA
日本软银 JPOS_1
荷兰 EUNL_9
$49.99/季度
$169.99/年
直达
CN2 GIA-E 2GB 3核 40GB 2TB 2.5Gbps $89.99/季度
$299.99/年
直达
HK 2GB 2核 40GB 0.5TB 1Gbps 中国香港 CN2 GIA $89.99/月
$899.99/年
直达
HK 4GB 4核 80GB 1TB 1Gbps $155.99/月
$1559.99/年
直达
TOKYO 2GB 2核 40GB 0.5TB 1.2Gbps 日本东京 CN2 GIA $89.99/月
$899.99/年
直达
TOKYO 4GB 4核 80GB 1TB 1.2Gbps $155.99/月
$1559.99/年
直达
搬瓦工优惠码:BWH3HYATVBJW 2022年最新搬瓦工VPS购买图文教程

选择建议:

  • 入门:洛杉矶 CN2 套餐,目前最便宜,可选 CN2 GT 机房,入门之选。
  • 推荐:洛杉矶 CN2 GIA-E 套餐,速度超快,可选机房多(DC6、DC9、日本软银、荷兰联通等),性价比最高。
  • 高端:香港 CN2 GIA 套餐,价格较高,但是无可挑剔。东京 CN2 GIA 套餐也是非常不错的高端选择。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注