环境:
我们正在从 PHP 8.2 升级到 PHP 8.4。迄今为止唯一的改变是在 Laravel Sail 中升级 PHP 并重建 Docker 镜像。
检查版本时,一切似乎都是正确的:
% sail php -v
PHP 8.4.1 (cli) (built: Nov 25 2024 18:04:19) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.4.1, Copyright (c) Zend Technologies
with Zend OPcache v8.4.1, Copyright (c), by Zend Technologies
with Xdebug v3.4.0, Copyright (c) 2002-2024, by Derick Rethans
但是,在运行 PHPUnit 测试时,我们遇到以下错误(大约 100 次成功测试后):
% sail test
zend_mm_heap corrupted
Symfony\Component\Process\Exception\ProcessSignaledException
The process has been signaled with signal "6".
at vendor/symfony/process/Process.php:462
458▕ usleep(1000);
459▕ }
460▕
461▕ if ($this->processInformation['signaled'] && $this->processInformation['termsig'] !== $this->latestSignal) {
➜ 462▕ throw new ProcessSignaledException($this);
463▕ }
464▕
465▕ return $this->exitcode;
466▕ }
+15 vendor frames
16 artisan:13
Illuminate\Foundation\Application::handleCommand()
问题详情:
该错误似乎与任何特定的测试用例无关,感觉更像是内存问题,但我不完全确定。 zend_mm_heap 损坏的消息表明 PHP 的内存管理器可能出现问题。
我尝试过的:
任何有关如何调试或解决此问题的指导将不胜感激。
更新(16/12/24)
我将单元测试切换到 SQLite 并通过 Laravel Herd 运行它们,得到相同的结果:
升级到 8.4 后我们遇到了同样的问题。
我们将其范围缩小到
hisorange/browser-detect
作曲家包。你用那个吗?尝试禁用它/注释掉它。