¿La memoria asignada por PHP en una única solicitud siempre se libera al final?

Estoy un poco confundido acerca de las pérdidas de memoria en PHP.

He leído que PHP está liberando automáticamente la memoria utilizada en cada solicitud gracias al Zend Memory Manager: http://www.webreference.com/programming/php_mem/2.html

Pero veo mucha gente y temas (incluso aquí en SO) preocupados por las fugas de PHP y memoria.

Entonces siento que estoy perdiendo algo.

¿Es posible tener pérdidas de memoria en PHP entre diferentes solicitudes?

No es posible tener pérdidas de memoria de scripts PHP entre diferentes solicitudes (cuando se utiliza la configuración de Apache predeterminada), ya que las variables y el código utilizados en una solicitud se lanzan al final de esa solicitud y el asignador de memoria de PHP se inicia de nuevo para la siguiente solicitud . Sin embargo, los errores en el intérprete o las extensiones de PHP pueden perder memoria por separado.

Un problema mucho mayor es que los procesos hijos de Apache tienen espacio de memoria PHP dentro de ellos. Se hinchan para asignar el uso máximo de memoria de un script PHP y luego mantienen esta asignación de memoria hasta que el proceso hijo muere (una vez que un proceso le pide al núcleo que asigne una porción de memoria, esa memoria no se liberará hasta que el proceso fallezca) ) Para una explicación más detallada de por qué esto es un problema y cómo combatirlo, vea mi respuesta en Server Fault .

Las pérdidas de memoria en un script, donde las variables no están desarmadas y el recolector de basura de PHP falla, son muy raras: la mayoría de los scripts PHP se ejecutan durante unos cientos de milisegundos, y generalmente este no es tiempo suficiente para que se manifieste una pérdida de memoria grave.

Puedes controlar cuánta memoria está usando tu script PHP con memory_get_usage() y memory_get_peak_usage() – también hay una buena explicación sobre el uso de la memoria y cómo progtwigr defensivamente en el manual de PHP .

La administración de memoria de PHP se explica en detalle en este artículo .

editar: puede determinar los comstackdos en los módulos de Apache con httpd -l – los valores predeterminados varían según la distribución del sistema operativo y la configuración del repository. Hay muchas maneras de conectar PHP a Apache, la más detallada aquí .