• /
  • EnglishEspañolFrançais日本語한국어Português
  • EntrarComeçar agora

Esta tradução de máquina é fornecida para sua comodidade.

Caso haja alguma divergência entre a versão em inglês e a traduzida, a versão em inglês prevalece. Acesse esta página para mais informações.

Criar um problema

O PHPUnit ficou sem memória.

Problema

Quando você usa o PHPUnit versão 11 ou mais recente para gerenciar e executar seus testes de unidade e tem o agente PHP New Relic instalado e ativado, a execução do script phpunit (o executor de testes de linha de comando do PHPUnit) fará com que ele consuma toda a memória disponível do sistema antes de realmente executar qualquer teste.

Solução

Para evitar erros de falta de memória, você deve explicitly disable o agente definindo newrelic.enabled para false. Você pode desativá-lo ao usar phpunit desta forma:

bash
$
php -d newrelic.enabled=false vendor/bin/phpunit tests/

Por exemplo, para executar um arquivo de teste específico:

bash
$
php -d newrelic.enabled=false vendor/bin/phpunit tests/Unit/ExampleTest.php

Importante

Essa solução alternativa desativa toda a instrumentação do New Relic durante a execução de testes unitários, o que significa que nenhum dado de APM será coletado durante a execução dos testes.

Alternativamente, você pode desativar o agente no seu arquivo de configuração php.ini se precisar dessa configuração permanentemente para o seu ambiente de desenvolvimento:

newrelic.enabled = false

Causa

O motivo dessa incompatibilidade é um novo código que foi adicionado no PHPUnit 11.x: Reaplicar "Verificar e restaurar manipuladores globais de erro/exceção" · sebastianbergmann/phpunit@0214cf8. Este novo código recupera a lista de manipuladores de exceção ativos usando um método que requer a remoção de cada manipulador de exceção da stack de manipuladores de exceção. No entanto, o agente PHP New Relic instala seu próprio manipulador de exceções por padrão e impede que ele seja removido da stack de manipuladores de exceções. O agente detecta quando seu manipulador de exceções está sendo removido e o registra novamente imediatamente. Isso causa um loop infinito no script phpunit : PHPUnit nunca consegue terminar de remover os manipuladores da stack porque o agente PHP New Relic registra continuamente seu manipulador novamente!

Copyright © 2025 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.