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


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

我这里就保留默认的值。
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/)监视。


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