Opcache参数配置优化设置教程 加速WordPress网站访问

Opcache参数配置优化设置教程 加速WordPress网站访问插图

对于使用WordPress站点的小伙伴,肯定经常进行各类网站优化,比如开启各种缓存,像Memcached缓存,Opcache缓存等等。其实各种缓存默认开启就有加速的效果了,但是如果进行一些参数优化设置,可以使得WordPress网站缓存的加速效果达到最大。这里搬主题就分享一下Opcache参数配置优化设置教程。

一、Opcache 性能优化的原理

1、Opcache是什么?

Opcache是一种通过将解析的PHP脚本预编译的字节码(Operate Code)存放在共享内存中来避免每次加载和解析PHP脚本的开销,解析器可以直接从共享内存读取已经缓存的字节码(Operate Code),从而大大提高PHP的执行效率。

2、什么是Operate Code?

当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。Opcode cache的目地是避免重复编译,减少CPU和内存开销。如果动态内容的性能瓶颈不在于CPU和内存,而在于I/O操作,比如数据库查询带来的磁盘I/O开销,那么opcode cache的性能提升是非常有限的。但是既然opcode cache能带来CPU和内存开销的降低,这总归是好事。现代操作码缓存器(Optimizer+,APC2.0+,其他)使用共享内存进行存储,并且可以直接从中执行文件,而不用在执行前“反序列化”代码。这将带来显着的性能加速,通常特别是高流量和高并发量时降低了整体服务器的内存消耗,而且很少有缺点。

3、为什么要使用Opcode缓存?

这得从PHP代码的生命周期说起,请求PHP脚本时,会经过五个步骤,如下图所示:

Opcache参数配置优化设置教程 加速WordPress网站访问插图1

Zend引擎必须从文件系统读取文件、扫描其词典和表达式、解析文件、创建要执行的计算机代码(称为Opcode),最后执行Opcode。每一次请求PHP脚本都会执行一遍以上步骤,如果PHP源代码没有变化,那么Opcode也不会变化,显然没有必要每次都重行生成Opcode,结合在Web中无所不在的缓存机制,我们可以把Opcode缓存下来,以后直接访问缓存的Opcode岂不是更快,启用Opcode缓存之后的流程图如下所示:

Opcache参数配置优化设置教程 加速WordPress网站访问插图2

因此使用了Operate Code缓存之后,PHP代码会直接获取opcode后直接执行,中间的三个步骤会省略掉因此会大幅提高PHP代码执行效率

二、Opcache配置参数优化

PHP 官网有 Opcache 所有配置参数的解释,可以去了解一下:

Opcache 配置手册

下文我将对几个 Opcache 常用配置参数进行讲解。

opcache.enable

此参数的值为 1 代表开启 Opcache,值为 0 代表关闭 Opcache,默认值为 1。

opcache.memory_consumption

此参数的值代表 Opcache 占用内存的大小,单位是 MB,默认值为 64。建议根据服务器内存情况来设置,比如我的博客服务器的内存是 2 G,我将此参数的值设置为 256。

opcache.interned_strings_buffer

PHP 使用了一种叫做字符串驻留(string interning)的技术来改善性能。例如,如果你在代码中使用了 1000 次字符串 foobar,Zend 引擎在第一次使用这个字符串时会分配一个不可变的内存区域来存储这个字符串,之后的 999 次都会直接引用这个内存区域,而不需要重复创建。

此参数将字符串驻留 这个特性提升一个层次,默认情况下这个不可变的内存区域只会存在于单个 php-fpm 的进程中,如果设置了这个选项,那么这个内存区域将会在所有 php-fpm 进程中共享。在比较大的应用中,这可以非常有效地节约内存,提高应用的性能。

此参数的值的单位是 MB,默认值为 8,建议根据服务器内存大小,设置一个大于 64 的值即可。

opcache.max_accelerated_files

Zend 引擎在第一次执行某 PHP 文件后,会将该文件的 OPcode 存储在哈希表中,之后的请求直接从哈希表中找到相应文件的 OPcode,从而达到性能优化,而此配置选项决定了可以存储的 PHP 文件数量上限。

Zend 引擎对此配置参数的真实取值是在质数集合 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } 中找到的第一个大于等于参数值的质数,例如设置此参数的值为 222,则真实取值为 223。

那么如何知道我们应用中的 PHP 文件数量呢?进入应用目录,一般这里指的是进入我们WordPress的站点根目录,使用如下命令即可查看应用中的 PHP 文件数量:

cd /home/banzhuti.com/www 

find . -type f -print | grep php | wc -l

经过测试,搬主题的应用的 PHP 文件数量为 1996,所以我将该参数的值设置为 3907。

opcache.validate_timestamps

如果此参数的值设置为 1,那么 Zend 引擎在收到请求时,会每隔一段时间检测一次被请求的 PHP 文件是否已更新。如果文件已更新,就会重新对该文件进行语法分析、编译等步骤,生成新的 Opcode。

检测的周期是根据另一个参数 opcache.revalidate_freq 而定的,每次检测都是一次 stat 系统调用,众所周知,系统调用会消耗一些 CPU 时间,并且 stat 系统调用会进行磁盘 I/O,更加浪费性能。

不仅如此,假设你对服务器中的 PHP 文件进行了一次大量的更新,更新的过程中部分旧的文件会因为未过期而依然生效,和部分已生效的新文件混合在一起产生作用,必然会产生不确定因素,带来很多麻烦,所以建议将此参数的值设置为 0

不过需要注意的是,设置为 0 后,无论你怎么更新文件,Zend 引擎都会使用已缓存的 Opcode,除非重启 php-fpm 或使用 opcache_reset() 方法清空缓存。有人可能会觉得重启 php-fpm 很麻烦,万一重启过程中,正在执行的任务被中断了怎么办?其实解决办法很简单,写一个启动脚本,进行平滑重启即可。

php-fpm 启动脚本

根据提示将该脚本下载至你的服务器,需要重启的时候即可运行以下命令进行平滑重启:

service php-fpm reload

opcache.revalidate_freq

当 opcache.validate_timestamps 设置为 0 时,此参数将被忽略。

设置为 1 时,此参数的值决定了检测 PHP 文件是否已更新的周期,单位为秒,默认值为 2。Opcache 依据 PHP 文件的 Modify 时间戳 来判断文件是否已更新,可以使用 stat 命令可以查看 Modify 时间戳 。

opcache.file_update_protection

当 Zend 引擎执行某 PHP 文件时,如果该文件的 Modify 时间戳 距当前时间的差值小于此参数的值,则该文件不会被缓存,此参数值的单位为秒,默认为 2。

此参数的目的是为了防止文件还未修改完成就被 Opcache 缓存了,从而产生错误。而实际生产环境中,我们将 opcache.validate_timestamps 设置为 0,文件只要被访问一次,就会被永久缓存,除非重启 php-fpm 才会刷新缓存,所以此参数没什么用,还浪费性能,建议设置为 0。

opcache.huge_code_pages

众所周知,Linux 系统默认内存是以 4KB 进行分页的,而虚拟地址和内存地址是需要转换的,转换过程需要进行查表,CPU 为了加速查表会内建 TLB(Translation Lookaside Buffer),而 TLB 的大小是有限的,分页越小,表里的条目也就越多,TLB 的 Cache Miss 也就越高。

所以我们如果启用大内存页,就能间接降低 TLB 的 Cache Miss,而 Opcache 也能使用 Hugepage 来缓存 Opcodes,从而达到性能优化的目的。

此参数值为 1 即可开启以上功能,默认值为 0。

设置完后还没正式开启,需要系统开启 Hugepage 功能,使用如下命令可以查看当前系统 Hugepage 的信息:

cat /proc/meminfo | grep Huge

运行该命令会输入类似如下结果:

[root@leo ~]# cat /proc/meminfo | grep Huge
AnonHugePages:    494621 kB
ShmemHugePages:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB

可以看到 HugePages_Total 等参数的值为 0,也就是未开启 HugePages 功能。

运行如下命令即可开启 HugePages,其中 128 代表 HugePages 的大小,单位是 MB:

sysctl vm.nr_hugepages=128

建议根据服务器内存情况进行分配 HugePages,例如搬主题的服务器是 2G,设置为 128,可以自行参考进行设置。

三、Opcache优化的完整配置参考

下面的配置是搬主题正在使用的 Opcache 配置,只有 6 个选项需要设置,其他选项如果不了解最好不要设置,使用默认值即可,避免发生意外情况。

修改配置的方法很简单,编辑 php.ini,将所有 [opcache] 下的相关内容全部删除,替换为如下内容:

[opcache]
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=32531
opcache.validate_timestamps=0
opcache.file_update_protection=0
opcache.huge_code_pages=1

修改完毕后需要重启 php-fpm 使配置生效:

service php-fpm reload

如果用的是OpenLiteSpeed的环境,意味着不是修改PHP就行了,那么需要修改Opcache的配置文件。

先找到对应的Opcache路径

find / -name 10-opcache.ini
Opcache参数配置优化设置教程 加速WordPress网站访问插图3

因为站点用的是PHP 7.4,因此需要编辑lsphp74下的Opcache的配置文件,输入如下命令后回车

vi /usr/local/lsws/lsphp74/etc/php.d/10-opcache.ini

然后就进入了Opcache的配置文件进行修改。

Opcache参数配置优化设置教程 加速WordPress网站访问插图4

按键盘上的 I 键进入修改模式,修改完成后按 esc 键退出,然后输入 :wq 保存回车即可。

修改完成后不要忘记重启PHP服务哦。不懂的话直接重启服务器也行。

文章来源:搬主题
原文链接:Opcache参数配置优化设置教程 加速WordPress网站访问

 收藏 (0) 更新不易,打赏吧

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

除特别注明外,本站所有文章均基于CC-BY-NC-SA 4.0原创,转载请注明出处。
文章名称:《Opcache参数配置优化设置教程 加速WordPress网站访问》
文章链接:https://www.xiapilu.com/web/web-tutorial/opcache-wordpress.html
分享到: 生成海报

热门文章

评论 抢沙发

评论前必须登录!

立即登录   注册

切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活