PHP 协程框架Swoole开启Opcache脚本缓存扩展后偶尔出现502错误的解决办法

这是一个通病,只要有php协程框架swoole,开启Opcache就会存在这个问题,原因应该是Opcache中的预编译jit调用模式和swoole异步机制存在冲突。

默认Opcache中的预编译jit调用模式是1205,要理解什么是1205,先来慢慢看分析。

先来看一张图,这个是CSDN博主明月登楼的一篇文章分析的Opcache中预编译jit的作用,以及Opcache在php8中的重要性。

PHP 协程框架Swoole开启Opcache脚本缓存扩展后偶尔出现502错误的解决办法

之所以 PHP8+OPCache JIT 速度快主要原因就是上图所示了,也就是 PHP 这种功能解释语言被 OPCache JIT 直接给编译后执行了,学过编程的都知道,编译过的代码执行效率才是最高的,这要是至今 C/C++都依然流行并占据主导的主要原因。

知道问题所在了,如果不做进一步分析,可以直接把jit给关了,但是把预编译给关了,那我们用这个扩展的意义又在哪里,关很简单,在php.ini中搜索查找opcache.jit,找到这一行后,把后面的参数改为0即可,变为opcache.jit=0,然后重启php服务即可解决。(如果没有,手动添加这个)

PHP 协程框架Swoole开启Opcache脚本缓存扩展后偶尔出现502错误的解决办法

只要关了,你的网站或者程序再也不会遇到502错误了,经过测试,关了和不关网页加载速度查了一倍不止,我们需要知道jit调用模式是怎样的。

opcache.jit=CRTO,其中的位分别是:

第一位数字,是否使用avx指令,现在的cpu都支持
0-禁用特定 CPU 优化
1-如果 CPU 支持则启用 AVX
如果不确定,可以通过下面的命令查看

 cat /proc/cpuinfo

第二位数字,寄存器分配策略,一般选2
0-不执行寄存器分配
1-执行局部域寄存器分配
2-执行全局寄存器分配
第三位数字,触发策略
0-在php脚本加载时编译所有函数
1-php文件第一次执行时预编译
2-第一次请求时分析函数,然后编译最热门函数
3-动态分析和编译热门函数
4-目前未使用
5-使用追踪 JIT。动态分析和为热门代码段编译追踪。
第四位数字,优化策略,数字越大,优化越大
0 不 JIT
1 最小 JIT(调用标准 VM 处理程序)
2 内联 VM 处理程序
3 使用类型推断
4 使用调用图
5 优化整个脚本

所以从上述来看,参数1205代表什么含义

经过测试,把1205换成1204,就是最后一个参数不要优化整个脚本,效率执行非常高,也没有出现502错误,目前来推断,应该是优化整个脚本的时候,把哪个代码给优化掉了,导致了偶发性502,后面再注意观察一段时间。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
系统网站问题

WordPress 更换后台登陆界面logo图标

2024-5-31 17:33:26

系统网站问题

WordPress后台仪表盘慢问题分析和解决

2024-6-5 15:34:20

个人中心
购物车
优惠劵
有新私信 私信列表
搜索