Laravel Sail 中的 PHP 8.4 升级导致 PHPUnit 测试期间 zend_mm_heap 损坏错误

问题描述 投票:0回答:1

环境:

  • PHP:8.4
  • Laravel:11.35.1
  • 航行:1.39.1
  • PHP 单位:10.5.39
  • macOS:15.1.1 (24B91)

我们正在从 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 的内存管理器可能出现问题。

我尝试过的:

  1. 重建了 Laravel Sail Docker 容器。
  2. 已验证的 PHP、Laravel 和 PHPUnit 版本是最新的。

任何有关如何调试或解决此问题的指导将不胜感激。

更新(16/12/24)

我将单元测试切换到 SQLite 并通过 Laravel Herd 运行它们,得到相同的结果:

  • 8.2 (8.2.26) - 有效
  • 8.3 (8.3.14) - 有效
  • 8.4 (8.4.1) - 失败(同一问题)
php laravel laravel-sail php-8.4
1个回答
0
投票

升级到 8.4 后我们遇到了同样的问题。

我们将其范围缩小到

hisorange/browser-detect
作曲家包。你用那个吗?尝试禁用它/注释掉它。

© www.soinside.com 2019 - 2024. All rights reserved.