Com evitar que PHP-FPM consumeixi massa RAM a Linux


Si heu desplegat una pila LEMP (Linux, NGINX, MySQL/MariaDB i PHP), probablement feu servir el proxy FastCGI dins de NGINX (com a servidor HTTP) per al processament PHP. PHP-FPM (acrònim de FastCGI Process Manager) és una implementació alternativa de PHP FastCGI d'alt rendiment àmpliament utilitzada.

Aquí teniu les guies útils per configurar LEMP Stack a Linux.

  • Com instal·lar LEMP Stack amb PhpMyAdmin a Ubuntu 20.04
  • Com instal·lar el servidor LEMP a CentOS 8
  • Com instal·lar LEMP al servidor Debian 10

Recentment, tots els nostres llocs web PHP en un dels nostres servidors web LEMP es van tornar lents i finalment van deixar de respondre en iniciar sessió al servidor. vam descobrir que el sistema s'estava quedant sense memòria RAM: PHP-FPM havia consumit la major part de la memòria RAM, tal com s'indica a la següent captura de pantalla (mirades - eina de monitorització del sistema).

$ glances

En aquest article, mostrarem com evitar que PHP-FPM consumeixi massa o tota la memòria del sistema (RAM) a Linux. Al final d'aquesta guia, aprendràs a reduir el consum de memòria PHP-FPM en un 50% o més.

Redueix l'ús de memòria PHP-FPM

Després de fer algunes investigacions a Internet, vam descobrir que necessitàvem reconfigurar el gestor de processos PHP-FPM i alguns aspectes del mateix per reduir el consum de memòria de PHP-FPM al fitxer de configuració de la piscina.

El grup predeterminat és www i el seu fitxer de configuració es troba a /etc/php-fpm.d/www.conf (a CentOS/RHEL/Fedora) o /etc/php/7.4/fpm/pool.d/www.conf ( a 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]

Cerqueu les directives següents i configureu-ne el valor per adaptar-se al vostre cas d'ús. Per a les directives que es comenten, cal que les descomenteu.

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

Expliquem breument les directrius anteriors i els seus valors. La directiva pm determina com controlarà el gestor de processos el nombre de processos fills. El mètode predeterminat és dinàmic, el que significa que el nombre de fills (processos secundaris) s'estableix dinàmicament en funció d'altres directives, com ara pm.max_children, que defineix el nombre màxim de fills que poden estar vius al mateix temps.

El gestor de processos més ideal és l'esquema a demanda on no es creen processos fills a l'inici, sinó que es generen a demanda. Els processos secundaris només es bifurquen quan les sol·licituds noves es connecten en funció de pm.max_children i pm.process_idle_timeout que defineixen el nombre de segons després dels quals s'aturarà un procés inactiu.

Finalment, però no menys important, hem d'establir el paràmetre pm.max_requests que defineix el nombre de sol·licituds que ha d'executar cada procés fill abans de tornar a generar. Tingueu en compte que aquest paràmetre també es pot utilitzar com a solució alternativa per a les fuites de memòria a les biblioteques de tercers.

Referència: una millor manera d'executar PHP-FPM.

Després de fer aquestes configuracions anteriors, em vaig adonar que l'ús de RAM ara està bé al nostre servidor. Tens alguna reflexió per compartir relacionada amb aquest tema o preguntes? Posa't en contacte amb nosaltres mitjançant el formulari de comentaris que hi ha a continuació.