问题描述
在 PHP 8 fpm 上发生了非常奇怪的事情(使用任何 Eloquent 触发它)并且无法调试核心转储(PHP 7.3 可以)
环境是 Debian 10(Vagrant VM 和 DO droplet)
Composer 展示并刚刚进行了 Composer 全局更新
...
"require": {
"PHP": "^7.3|^8.0","aws/aws-sdk-PHP": "^3.176","barryvdh/laravel-cors": "^2.0","barryvdh/laravel-debugbar": "^3.5","barryvdh/laravel-ide-helper": "^2.9","barryvdh/laravel-snappy": "^0.4.8","beyondcode/laravel-dump-server": "^1.7","dyrynda/laravel-nullable-fields": "^4.1","fideloper/proxy": "^4.4","fruitcake/laravel-cors": "^2.0","google/apiclient": "^2.","guzzlehttp/guzzle": "^7.3","hashids/hashids": "^4.1","laracasts/flash": "^3.2","laravel/cashier": "^12.10","laravel/framework": "^8.40","laravel/horizon": "^5.7","laravel/sanctum": "^2.9","laravel/scout": "^8.6","laravel/socialite": "^5.2","laravel/telescope": "^4.4","laravel/tinker": "^2.6","laravel/ui": "^3.2","laravelcollective/html": "^6.2","league/csv": "^9.7","league/flysystem-aws-s3-v3": "^1.0","phery/phery": "^2.7","PHP-parallel-lint/PHP-console-color": "^1.0","plivo/plivo-PHP": "^4.18","predis/predis": "^1.1","sofa/eloquence": "dev-master","vinkla/hashids": "^9.1","wildbit/postmark-PHP": "^4.0","wildbit/swiftmailer-postmark": "^3.3"
},"require-dev": {
"facade/ignition": "^2.5","fakerPHP/faker": "^1.9.1","laravel/breeze": "^1.1","laravel/sail": "^1.0.1","mockery/mockery": "^1.4.2","nunomaduro/collision": "^5.0","PHPunit/PHPunit": "^9.3.3"
},
Nginx + PHP7.4-fpm
Laravel (PHP) 代码在 PHP7.4-fpm 下工作(Nginx + fpm 的正常设置) 如果有语法错误,浏览器会显示一个带有错误的漂亮网页(以及望远镜链接)
Nginx + PHP8.0-fpm
大多数“简单”的 PHP 页面都可以工作(快速的 PHPinfo.PHP 也可以正常工作)……但是当您在 {{3} 的登录页面上单击提交时,它开始显示“502 Bad Gateway”(Nginx) }(显示初始形式)
这仅发生在 PHP8.0-fpm(使用 Vagrant VM 并在 DO droplet 上复制)
某些原因导致 PHP8.0-fpm 出现 SIGSEGV(信号 11)。它甚至没有击中 Laravel 日志,并且 Nginx 从 PHP8.0-fpm 的响应中显示“502 Bad Gateway”(标准的 Nginx 错误页面)
在/var/log/PHP8.0-fpm.log
WARNING: [pool www] child 3956 exited on signal 11 (SIGSEGV - core dumped) after 63.502325 seconds from start
我已经能够生成核心转储,但是 bt
没有显示太多信息。核心转储(在 vagrant VM 上)超过 200MB(用于页面刷新的巨大文件?),这从 #0 到 #38286(很多很多行)几乎相同的东西,但没有我期待的功能查看(函数或框架),它似乎处于无限循环中......
Reading symbols from /usr/sbin/PHP-fpm8.0...(no debugging symbols found)...done.
[New LWP 3956]
[Thread debugging using libthread_db enabled]
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 0x000056483469fa4e in zend_is_callable_at_frame ()
(gdb) bt
#0 0x000056483469fa4e in zend_is_callable_at_frame ()
#1 0x00005648346a09a7 in zend_is_callable_ex ()
#2 0x00005648346a0adc in zend_fcall_info_init ()
#3 0x00005648345ca7ec in ?? ()
#4 0x0000564834701268 in execute_ex ()
#5 0x000056483468c5d2 in zend_call_function ()
#6 0x00005648345ca820 in ?? ()
#7 0x0000564834701268 in execute_ex ()
#8 0x000056483468c5d2 in zend_call_function ()
#9 0x00005648345ca820 in ?? ()
#10 0x0000564834701268 in execute_ex ()
#11 0x000056483468c5d2 in zend_call_function ()
#12 0x00005648345ca820 in ?? ()
...
#38280 0x00005648345ca820 in ?? ()
#38281 0x0000564834701268 in execute_ex ()
#38282 0x0000564834702c3c in zend_execute ()
#38283 0x0000564834699e0d in zend_execute_scripts ()
#38284 0x0000564834636b0b in PHP_execute_script ()
#38285 0x00005648344f0109 in ?? ()
#38286 0x00007f7c0e98109b in __libc_start_main (main=0x5648344ef280,argc=4,argv=0x7ffd1785e398,init=<optimized out>,fini=<optimized out>,rtld_fini=<optimized out>,stack_end=0x7ffd1785e388) at ../csu/libc-start.c:308
#38287 0x00005648344f0f1a in _start ()
在代码方面,我已经能够将它隔离到 Eloquent 但数据库正在运行
以下几行工作
$users = DB::table('users')->get();
//dd($users);
echo count($users); // show 31
$user = User::find(10001);
或
$users = User::all(); // only 31 records in the database
有什么想法吗?也许降级回 PHP 7.4(这似乎不是一个好方法)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)