一、简介

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。

参考资料: