优化CyberPanel上的PHP性能开启OPcache和JIT - 技术宅银魂 - 科技改变生活 - 万事屋 | 生活·动漫·娱乐综合社区-银魂同好聚集地

优化CyberPanel上的PHP性能开启OPcache和JIT

CyberPanel其实优化的挺好了,但大流量一来还是要做点操作,比如它所有安装的php都没有开启OPcache,直接编辑里添加以下代码:

zend_extension=opcache


opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1

注:zend_extension=opcache ,不是 zend_extension=opcache.so 

如果php8.0以上版本,可以在上面的代码下加下面这两段:

opcache.jit=1205
opcache.jit_buffer_size=64M

opcache.jit这个配置看起来稍微有点复杂,我来解释下, 这个配置由4个独立的数字组成,从左到右分别是(请注意,这个是基于目前alpha1的版本设置,一些配置可能会随着后续版本做微调)

4176776793

1. 是否在生成机器码点时候使用AVX指令,需要CPU支持:

  • 0:不使用
  • 1:使用

2. 寄存器分配策略:

  • 0:不使用寄存器分配
  • 1:局部(block)域分配
  • 2:全局(function)域分配

3. JIT触发策略:

  • 0:PHP脚本载入的时候就JIT
  • 1:当函数第一次被执行时JIT
  • 2:在一次运行后,JIT调用次数最多的百分之(opcache.prof_threshold*100)的函数
  • 3:当函数/方法执行超过N(N和opcache.jit_hot_func相关)次以后JIT
  • 4:当函数方法的注释中含有 jit的时候对它进行JIT
  • 5:当一个Trace执行超过N次(和opcache.jit_hot_loop,jit_hot_return等有关)以后JIT

4. JIT优化策略,数值越大优化力度越大:

  • 0:不JIT
  • 1:做opline之间的跳转部分的JIT
  • 2:内敛opcode handler调用
  • 3:基于类型推断做函数级别的JIT
  • 4:基于类型推断,过程调用图做函数级别JIT
  • 5:基于类型推断,过程调用图做脚本级别的JIT

基于此,我们可以大概得到如下几个结论:

  • 尽量使用12×5型的配置,此时应该是效果最优的
  • 对于x,如果是脚本级别的,推荐使用0,如果是Web服务型的,可以根据测试结果选择3或5
  • jit的形式,在有了attributes以后,可能变为<>

为什么要开启这个?

源代码(人认识)->字节码(解释器认识)->机器码(硬件认识)

来看下PHP的执行流程,假设有个a.php文件,不启用opacache的流程如下:

a.php->经过zend编译->opcode->PHP解释器->机器码

启用opacache的流程如下:

a.php->查找opacache缓存,如果没有则进行zend编译为opcode并缓存->opacode->PHP解释器->机器码

启用PHP8-JIT的流程如下:

a.php->编译->机器码

以后都只执行机器码,不编译,效率上高了很多。

请登录后发表评论

    没有回复内容

万事屋新帖