Búsqueda de sitios web

Cómo evitar que PHP-FPM consuma demasiada RAM en Linux


Si ha implementado un LEMP (Linux, NGINX, MySQL/MariaDB y PHP) pila, entonces probablemente esté utilizando el proxy FastCGI dentro de NGINX (como un servidor HTTP), para el procesamiento de PHP. PHP-FPM (un acrónimo de FastCGI Process Manager) es una implementación alternativa de PHP FastCGI ampliamente utilizada y de alto rendimiento.

Aquí están las guías útiles sobre cómo configurar LEMP Stack en Linux.

  • Cómo instalar LEMP Stack con PhpMyAdmin en Ubuntu 20.04
  • Cómo instalar el servidor LEMP en CentOS 8
  • Cómo instalar LEMP en el servidor Debian 10

Recientemente, todos nuestros sitios web PHP en uno de nuestros servidores web LEMP se volvieron lentos y finalmente dejaron de responder al iniciar sesión en el servidor. Descubrimos que el sistema se estaba quedando sin RAM: PHP-FPM había consumido la mayor parte de la RAM, como se indica en la siguiente captura de pantalla (vistazos – herramienta de monitoreo del sistema).

glances

En este artículo, mostraremos cómo evitar que PHP-FPM consuma demasiada o toda la memoria del sistema (RAM) en Linux. Al final de esta guía, aprenderá cómo reducir el consumo de memoria PHP-FPM en un 50% o más.

Reducir el uso de memoria PHP-FPM

Después de investigar un poco en Internet, descubrimos que necesitábamos reconfigurar el administrador de procesos PHP-FPM y ciertos aspectos del mismo para reducir el consumo de memoria de PHP-FPM en el archivo de configuración del grupo.

El grupo predeterminado es www y su archivo de configuración se encuentra en /etc/php-fpm.d/www.conf (en CentOS/RHEL/Fedora.) o /etc/php/7.4/fpm/pool.d/www.conf (en Ubuntu/Debian/Mint).

sudo vim /etc/php-fpm.d/www.conf             [On CentOS/RHEL/Fedora]
sudo vim /etc/php/7.4/fpm/pool.d/www.conf    [On Ubuntu/Debian/Mint]

Busque las siguientes directivas y establezca su valor para adaptarlo a su caso de uso. Para las directivas que están comentadas, es necesario descomentarlas.

pm = ondemand
pm.max_children = 80
pm.process_idle_timeout = 10s
pm.max_requests = 200

Expliquemos brevemente las directivas anteriores y sus valores. La directiva pm determina cómo el administrador de procesos controlará la cantidad de procesos secundarios. El método predeterminado es dinámico, lo que significa que el número de hijos (procesos hijos) se establece dinámicamente dependiendo de otras directivas, incluida pm.max_children, que define el número máximo de hijos que puede estar vivo al mismo tiempo.

El administrador de procesos más ideal es el esquema ondemand donde no se crean procesos secundarios al inicio, sino que se generan según demanda. Los procesos secundarios solo se bifurcan cuando se conectan nuevas solicitudes según pm.max_children y pm.process_idle_timeout, que definen la cantidad de segundos después de los cuales se eliminará un proceso inactivo.

Por último, pero no menos importante, debemos configurar el parámetro pm.max_requests que define la cantidad de solicitudes que cada proceso hijo debe ejecutar antes de reaparecer. Tenga en cuenta que este parámetro también se puede utilizar como solución alternativa para pérdidas de memoria en bibliotecas de terceros.

Después de realizar estas configuraciones anteriores, noté que el uso de RAM ahora está bien en nuestro servidor. ¿Tiene alguna idea para compartir relacionada con este tema o preguntas? Comuníquese con nosotros a través del formulario de comentarios a continuación.