OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是省去了每次加载和解析 PHP 脚本的开销。
PHP 8 之后正式支持 JIT 下的 OPcache,加速效果再一次提升。
左图是 PHP 8 之前的 OPcache 流程示意图, 右图是 PHP 8 中的 OPcache 示意图。
除掉原有的 OPcache 配置以外,对于 JIT 我们需要添加如下配置到 php.ini
:
[Zend Opcache]
zend_extension="opcache.so"
opcache.jit=1255
opcache.jit_buffer_size=64M
opcache.jit
这个配置由 4 位整数 CRTO 组成:
C(特定 CPU 优化 flag)
0:禁用特定 CPU 优化。
1:如果 CPU 支持则启用 AVX。
R(寄存器分配)
0:不执行寄存器分配。
1:执行局部域寄存器分配。
2:执行全局寄存器分配。
T(触发)
0: 在脚本加载时编译所有函数。
1: 在第一次执行时编译函数。
2:第一次请求时分析函数,然后编译最热门函数。
3:动态分析和编译热门函数。
4:目前未使用。
5:使用追踪 JIT。动态分析和为热门代码段编译追踪。
O(优化级别)
0:不 JIT。
1:最小 JIT(调用标准 VM 处理程序)。
2:内联 VM 处理程序。
3:使用类型推断。
4:使用调用图。
5:优化整个脚本。
基于此,我们可以大概得到如下几个结论:
尽量使用 12x5 型的配置,此时应该是效果最优的;
对于 x, 如果是脚本级别的,推荐使用 0, 如果是 Web 服务型的,可以根据测试结果选择 3 或 5。
参考资料: