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的版本设置,一些配置可能会随着后续版本做微调)
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->编译->机器码
以后都只执行机器码,不编译,效率上高了很多。
没有回复内容