Docker Yii2应用程序在升级到php 7.4并激活opcache后导致对等方重置连接
我们有一个大型的yii2应用程序,它在启用了nginx+PHP-fpm7.3和opcache的Debian Docker容器中完美运行 升级到PHP7.4.10后,在从上游读取响应头时,一些请求会导致“(由对等方重置连接)错误。 禁用opcache可以解决问题,但这并不是一个真正的选项。我也可以启用opcache并将整个yii2供应商文件夹列入黑名单,但这也不是一个选项 我们还在Debian VM上安装了一个非docker PHP-FPM 7.4+nginx+opcache,该seam到目前为止运行时不会出现此类错误。但我们需要Docker环境进行开发,然后在生产中切换到Docker环境 使用PHP7.3+opcache运行测试大约需要12分钟,现在没有opcache需要30分钟(!) 我尝试过,但没有成功:Docker Yii2应用程序在升级到php 7.4并激活opcache后导致对等方重置连接,docker,nginx,yii2,opcache,php-7.4,Docker,Nginx,Yii2,Opcache,Php 7.4,我们有一个大型的yii2应用程序,它在启用了nginx+PHP-fpm7.3和opcache的Debian Docker容器中完美运行 升级到PHP7.4.10后,在从上游读取响应头时,一些请求会导致“(由对等方重置连接)错误。 禁用opcache可以解决问题,但这并不是一个真正的选项。我也可以启用opcache并将整个yii2供应商文件夹列入黑名单,但这也不是一个选项 我们还在Debian VM上安装了一个非docker PHP-FPM 7.4+nginx+opcache,该seam到目前为止
- 使用官方的Yii2 docker图像
- 使用官方的PHP7.4.10Apache映像
- 使用官方PHP-FPM 7.4.10和最新的Nginx映像
- 使用比“docker version 19.03.12-ce,build 48a66213fe”更低版本的docker
- 在nginx、opcache和php的不同变体中设置几个参数,我在网络中发现类似于忽略nginx的无效头
- 将PHP版本降级到7.4.9或7.4.2
- 试图在我们的代码库中查找并修复导致错误的代码,但在大多数情况下,仅结果内容发生了更改,这意味着相同的控制器操作运行时会出现错误,而只有内容发生了更改。头和HTTP返回代码是相同的
- OS:5.7.19-2-MANJARO
- 码头工人:19.03.12-ce,建造48a66213fe
- CPU:英特尔i7-1065G7
- 内存:16 GB
- SSD:512 GB PCIe NVMe M.2
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `php-fpm: pool www '.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 zend_gc_delref (p=0x6341203a79726156) at ./Zend/zend_types.h:1041
1041 ./Zend/zend_types.h: No such file or directory.
(gdb) bt
#0 zend_gc_delref (p=0x6341203a79726156) at ./Zend/zend_types.h:1041
#1 i_zval_ptr_dtor (zval_ptr=<optimized out>) at ./Zend/zend_variables.h:43
#2 zval_ptr_dtor (zval_ptr=<optimized out>) at ./Zend/zend_variables.c:84
#3 0x000055fd4809a88c in user_shutdown_function_dtor (zv=<optimized out>) at ./ext/standard/basic_functions.c:5048
#4 0x000055fd48177a25 in zend_hash_destroy (ht=0x7f961acb1150) at ./Zend/zend_hash.c:1541
#5 0x000055fd480a0515 in php_free_shutdown_functions () at ./ext/standard/basic_functions.c:5174
#6 0x000055fd48106445 in php_request_shutdown (dummy=<optimized out>) at ./main/main.c:1905
#7 0x000055fd47fd14dd in main (argc=<optimized out>, argv=<optimized out>) at ./sapi/fpm/fpm/fpm_main.c:1970
使用主机libthread_db library”/lib/x86_64-linux-gnu/libthread_db.so.1”。
核心是由“php fpm:pool www”生成的。
程序以信号SIGSEGV终止,分段故障。
#0 zend_gc_delref(p=0x6341203a79726156)位于/zend/zend_类型。h:1041
1041./Zend/Zend_types.h:没有这样的文件或目录。
(gdb)英国电信
#0 zend_gc_delref(p=0x6341203a79726156)位于/zend/zend_类型。h:1041
#1 i_zval_ptr_dtor(zval_ptr=)位于/Zend/Zend_变量。h:43
#2 zval_ptr_dtor(zval_ptr=)位于./Zend/Zend_变量。c:84
#在./ext/standard/basic_functions.c:5048处的用户_shutdown_函数_dtor(zv=)中3 0x000055fd4809a88c
#4 0x000055fd48177a25位于/zend/zend_hash.c:1541的zend_hash_destroy(ht=0x7f961acb1150)中
#5 0x000055fd480a0515在./ext/standard/basic_functions.c:5174的php_free_shutdown_函数()中
#6 0x000055fd48106445位于./main/main.c:1905的php_请求_关闭(虚拟=)中
#7 0x000055fd47fd14dd位于/sapi/fpm/fpm/fpm_main.c:1970处的main(argc=,argv=)中
回溯引导我找到解决方案,它是pcov模块
禁用它成功了
当使用PHP7.3+opcache时,我被指向opcache的分段错误的搜索结果误导,以及对PHP7.4中的opcache和pcov模块所做的更改
现在,我很幸运它能在新的PHP版本中再次工作-
因为我们只需要pcov来生成代码覆盖率报告,我们可以禁用opcache来创建代码覆盖率报告
如果有人知道更多关于pcov+opcache+php7.4的信息,请留下评论