• /
  • EnglishEspañolFrançais日本語한국어Português
  • Inicia sesiónComenzar ahora

Te ofrecemos esta traducción automática para facilitar la lectura.

En caso de que haya discrepancias entre la versión en inglés y la versión traducida, se entiende que prevalece la versión en inglés. Visita esta página para obtener más información.

Crea una propuesta

PHPUnit se queda sin memoria

Problema

Cuando emplea PHPUnit versión 11 o más reciente para gestionar y ejecutar sus pruebas unitarias, y tiene instalado y habilitado el agente PHP New Relic, ejecutar el script phpunit (el ejecutor de pruebas de la línea de comandos PHPUnit) hará que consuma toda la memoria disponible del sistema antes de ejecutar realmente cualquier prueba.

Solución

Para evitar errores de falta de memoria, debe explicitly disable el agente configurando newrelic.enabled en false. Puedes desactivarlo mientras usas phpunit de esta manera:

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

Por ejemplo, para ejecutar un archivo de prueba específico:

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

Importante

Esta solución alternativa deshabilita toda la instrumentación de New Relic mientras se ejecutan pruebas unitarias, lo que significa que no se recopilarán datos de APM durante la ejecución de la prueba.

Como alternativa, puede deshabilitar el agente en su archivo de configuración php.ini si necesita esta configuración de forma permanente para su entorno de desarrollo:

newrelic.enabled = false

Causa

La razón de esta incompatibilidad es el nuevo código que se agregó en PHPUnit 11.x: Volver a aplicar "Verificar y restaurar controladores globales de errores/excepciones" · sebastianbergmann/phpunit@0214cf8. Este nuevo código recupera la lista de controladores de excepciones activos empleando un método que requiere extraer cada controlador de excepciones de la stack de controladores de excepciones. Sin embargo, el agente PHP New Relic instala su propio controlador de excepciones de forma predeterminada y evita que se elimine de la stack de controladores de excepciones. El agente detecta cuando se elimina su controlador de excepciones y lo vuelve a registrar inmediatamente. Esto provoca un bucle infinito en el script phpunit : PHPUnit nunca puede terminar de sacar los controladores de la stack porque el agente PHP New Relic vuelve a registrar continuamente su controlador.

Copyright © 2025 New Relic Inc.

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