效果

还是不多比比,上效果:(已关闭 WP Super Cache,开启 Memcached)

无 opcache,文章一多时间飙到六七秒了
有 opcache,速度几乎可以和静态网页媲美。注意看页脚的加载耗时,是动态的,并且内存占用极低

WP Super Cache 静态网页虽然快,但是最致命的缺点是动态元素没法变更,比如阅读数和文章发布距今时间;而且页面一有修改就要重新生成缓存,开销还是蛮大的。

OPcache 加持后,耗时几乎和静态网页持平,而且保持了页面的动态,内存消耗也极大降低,在后台看页面刷新时 CPU 终于不是 100% 了。而且不仅前台,后台管理页面也加速了。

当然 WP Super Cache 也不是完全没用了,一些几乎就是纯静态的网页(比如隐私政策,友链列表)在长时间内变化很小,就可以弄成静态网页进一步降低性能消耗。

WP Super Cache 教程请看:WP Super Cache:让你的网页加载爆炸快! – Eterance的小窝

宝塔面板开启 OPCache 扩展

OPcache 参数设置

重启一下 php 服务,然后在"配置文件"搜索 opcache.enable 跳到 opcache 的参数设置。

参考教程:https://managingwp.io/2022/12/14/adjusting-php-opcache-for-wordpress/

官方参数文档:https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.interned-strings-buffer

opcache.memory_consumption

单位 MB,默认 128

opcache 缓存占用的内存。低配置机器一般设置为可用内存的 1/4,或者 256-512 MB。更大的内存占用可以放下更多的缓存。

我的机器总共 2G 内存,可用内存 1.5G 左右,所以我很慷慨地分了 512MB。

opcache.interned_strings_buffer

单位 MB,默认 32

在 PHP 中,字符串常量是不可变的,它们在内存中占据一定的空间。为了提高性能和减少内存消耗,PHP 使用了字符串池(string intern pool)的机制。字符串池通过在内存中共享相同的字符串常量,避免了重复存储相同的字符串数据。增加 opcache.interned_strings_buffer 的大小可以提高字符串常量的共享和重用,从而减少内存占用。

这里我就保持给个 64 MB,之后可以根据实际使用情况再做调整。

opcache.max_accelerated_files

单位 个,默认 80000

最高可以缓存多少个文件。当达到 opcache.max_accelerated_files 设置的限制时,OPcache 会使用一种替换策略(例如最早使用的文件将被淘汰)来释放缓存中的一些脚本文件,为新的脚本文件腾出空间。

设置过小可能会导致频繁的文件淘汰,增加了解析和编译的开销,降低了 OPcache 的性能优势。而设置过大可能会占用过多的内存资源,特别是在有限的服务器配置下。

如果站点不大,完全可以保持默认或者直接容纳所有文件。查看站点下有多少 php 文件的命令行:

cd <你的站点目录>
sudo find . -iname "*.php" | wc -l
我的站点目前有近 3000 个 php 文件

我这里就保留默认的值。

opcache.revalidate_freq

单位 秒,默认 3

opcache.validate_timestamps 参数启用时,OPcache 会在每个请求中检查脚本文件的时间戳以确定是否重新缓存。opcache.revalidate_freq 参数定义了多少秒后进行一次时间戳检查。

一般个人博客站点不会非常频繁地修改 php 代码(除非很喜欢自己加乱七八糟地功能),而检查时间戳的操作会增加性能开销,所以这个值可以调大,甚至设置为 0 禁用检查;而如果你正在频繁地修改 php 代码,那么可能就要调小一点,比如个位数。

我这里就暂时先设置为 60。

opcache.fast_shutdow

没搞懂干嘛的,保持默认 1。

opcache.validate_timestamps

布尔值 0 和 1,默认 1

opcache.validate_timestamps 设置为 1,OPcache 在每个请求中会检查脚本文件的时间戳以确定是否重新缓存。

如果禁用(设置为 0 ),就永远不会检查缓存是否过期,修改了 php 文件后需要手动执行检查。

宝塔配置文件没有,我添加了上去并且保持默认的 1。

修改完之后,保存并重启 php 服务。

监视 OPcache 工作情况

这里就选用 WPJAM BASIC 这个插件(https://cn.wordpress.org/plugins/wpjam-basic/)监视。

刚刚开始使用了不到半个小时,截图于 2023.07.04 21:35
几天后,截图于 2023.07.09 15:47

第一个饼图对应 opcache.memory_consumption,最后一个饼图对应 opcache.interned_strings_buffer,可以根据这里的使用情况在日后调整这两个参数。


封面图:https://www.pixiv.net/artworks/100112501