問題
PHPUnitバージョン 11 以降を使用して単体テストを管理および実行し、 New Relic PHP エージェントをインストールして有効にしている場合、 phpunitスクリプト ( PHPUnitコマンドライン テスト ランナー) を実行すると、実際にテストを実行する前に、利用可能なシステム メモリがすべて消費されます。
解決
メモリ不足エラーを防ぐには、 newrelic.enabledをfalseに設定してエージェントをexplicitly disable必要があります。次のようにしてphpunit使用中に無効にすることができます。
$php -d newrelic.enabled=false vendor/bin/phpunit tests/たとえば、特定のテスト ファイルを実行するには、次のようにします。
$php -d newrelic.enabled=false vendor/bin/phpunit tests/Unit/ExampleTest.php重要
この回避策は、ユニット テストの実行中にすべてのNew Relicモジュールを無効にするため、テスト実行中にAPMデータは収集されません。
あるいは、開発環境でこの設定を永続的に必要とする場合は、 php.ini構成ファイルでエージェントを無効にすることもできます。
newrelic.enabled = false原因
この非互換性の原因は、PHPUnit 11.x で追加された新しいコードです: 「エラー/例外のグローバル ハンドラーをチェックして復元する」を再適用します · sebastianbergmann/phpunit@0214cf8 。この新しいコードは、各例外ハンドラーを例外ハンドラー スタックからポップする必要があるメソッドを使用して、アクティブな例外ハンドラーのリストを取得します。ただし、 New Relic PHPエージェントはデフォルトで独自の例外ハンドラーをインストールし、例外ハンドラースタックから削除されないようにします。 エージェントは例外ハンドラーが削除されたことを検出し、直ちにそれを再登録します。これにより、 phpunitスクリプトで無限ループが発生します。New New Relic PHPエージェントがハンドラーを継続的に再登録するため、 PHPUnitハンドラーをスタックからポップし続けることができません。