1.添加 EPEL 和 REMI 库
dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
2.启用PHP的Remi模块并进行安装
dnf -y install dnf-utils
3.查看可安装php8模块
dnf search php8
4.安装php8+swoole扩展+redis扩展
#查询包信息
dnf search php8 | grep 'swoole\|redis\|cli'
#安装,如果需要fpm可执行`dnf -y install php80-php-fpm`
dnf -y install php80-php-cli php80-php-pecl-redis5 php80-php-pecl-swoole4
5.完成
php80 -v
6.查看对应扩展信息
#php80 --ri <扩展名>
php80 --ri swoole
7.查看php.ini配置文件
php80 -i | grep php.ini
8.启用php8的JIT
编辑php.ini
vim /etc/opt/remi/php80/php.ini
删除初始的opcache配置,添加如下配置到php.ini
[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=192
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.jit=1205
opcache.jit_buffer_size=64M
配完成,重启fpm服务
systemctl restart php80-php-fpm.service
opcache.jit配置参数说明:
- 是否在生成机器码点时候使用AVX指令,需要CPU支持:
0:不使用
1:使用
- 寄存器分配策略:
0: 不使用寄存器分配
1: 局部(block)域分配
2: 全局(function)域分配
- JIT触发策略:
0:PHP脚本加载的时候就JIT 1:当函数第一次被执行时JIT
2:在一次运行后,JIT调用次数最多的百分之(opcache.prof_threshold * 100)的函数
3:当函数/方法执行超过N(N和opcache.jit_hot_func相关)次以后JIT
4:当函数方法的注释中包含@jit的时候对它进行JIT
5:当一个跟踪执行超过N次(和opcache.jit_hot_loop,jit_hot_return等有关)以后JIT
- JIT优化策略,数值越大优化力度越大:
0: 不JIT 1: 做opline之间的跳转部分的JIT
2: 内敛opcode handler调用
3: 基于类型推断做函数级别的JIT
4: 基于类型推断,过程调用图做函数级别JIT
5: 基于类型推断,过程调用图做脚本级别的JIT
##### 根据此,我们可以大概得到如下几个附图:
- 尽量使用12x5型的配置,此时应该是效果最优的
- 对于x,如果是脚本等级的,推荐使用0,如果是Web服务型的,可以根据测试结果选择3或5
- @jit的形式,在有了属性以后,可能变成<< jit >>
9.测试JIT
#不启用
php80 -d opcache.jit_buffer_size=0 Zend / index.php
#启用
php80 -d opcache.jit_buffer_size=64M -d opcache.jit = 1205 Zend / index.php
评论