Uso de memoria de php-cgi superior al límite de memoria de php

Uso de memoria de php-cgi superior al límite de memoria de php

Estoy ejecutando Apache con un MPM trabajador y php con fastcgi.

Los siguientes son mis límites de mpm:

StartServers         5
MinSpareThreads      5
MaxSpareThreads      10
ThreadLimit          64
ThreadsPerChild      10
MaxClients           10
MaxRequestsPerChild  2000

También configuré mi php-cgi con lo siguiente:

PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=500

Me doy cuenta de que mi proceso php-cgi promedio utiliza alrededor de 200+mb de RAM, incluso tan pronto como se inician. Sin embargo, mi límite de memoria de php es de solo 128 M.

¿Cómo es esto posible y qué puedo hacer para reducir el consumo de memoria de php-cgi?

Respuesta1

Hay casos en los que PHP puede exceder el límite de memoria configurado (memoria asignada directamente en las extensiones), sin embargo, sospecho que este puede no ser el caso.

Me doy cuenta de que mi proceso php-cgi promedio usa alrededor de 200+mb

¿Cómo midiste esto? La mayoría de los segmentos TXT serán compartidos, por lo que el uso real de la memoria es mucho menor que lo que verías en el sistema de archivos /proc o en ps/top. Si bien podría intentar analizar el resultado de lsof, en la práctica me parece mucho más sensato retroceder un poco y observar el número de solicitudes en curso (por ejemplo, del número de sockets conectados) y compararlo con la memoria libre informada ( menos buffers/caché).

Respuesta2

El límite de memoria en PHP es el límite de memoria interna, es decir, esa es la cantidad que el motor permitiría que el script del usuario asigne a través de su asignador privado. Pero además de eso, hay memoria asignada por el motor para sus necesidades internas, que no siempre se cuenta para el límite (parte sí, pero no toda), la memoria asignada por bibliotecas, etc. Así que espere memoria real. el uso debe ser ligeramente mayor que memory_limitel ajuste.

Además, como se mencionó anteriormente, algunas de las cifras reportadas por las herramientas son memoria asignada para el código, pila, buffers de E/S del sistema operativo, memoria compartida entre bibliotecas, etc., así que observe más de cerca qué cifra está verificando.

información relacionada