Comment empêcher PHP-FPM de consommer trop de RAM dans Linux

Comment empêcher PHP-FPM de consommer trop de RAM dans Linux

Si vous avez déployé un Lemp (Linux, Nginx, Mysql / mariadb, et Php) empiler, alors vous utilisez probablement Fastcgi proxing à l'intérieur Nginx (en tant que serveur HTTP), pour le traitement PHP. Php-fpm (un acronyme de FastCGI Process Manager) est une alternative largement utilisée et haute performance Php fastcgi mise en œuvre.

Voici les guides utiles sur la configuration Pile de lemp en linux.

  • Comment installer la pile LEMP avec phpmyadmin dans Ubuntu 20.04
  • Comment installer le serveur LEMP sur Centos 8
  • Comment installer Lemp sur Debian 10 Server

Récemment, tous nos Php Sites Web sur l'un de nos Lemp Les serveurs Web sont devenus lents et ont finalement cessé de répondre à la connexion au serveur. Nous avons découvert que le système fonctionnait bas sur RAM: Php-fpm avait consommé la plupart du RAM, comme indiqué dans la capture d'écran suivante (regards - outil de surveillance du système).

$ regards 
Placements - outil de surveillance du système

Dans cet article, nous montrerons comment empêcher Php-fpm de la consommation trop ou de toute votre mémoire système (RAM) en linux. À la fin de ce guide, vous apprendrez à réduire Php-fpm consommation de mémoire de 50% ou plus.

Réduire l'utilisation de la mémoire PHP-FPM

Après avoir fait des recherches sur Internet, nous avons découvert que nous devions reconfigurer le Php-fpm Process Manager et certains aspects de l'informatique pour réduire la consommation de mémoire de PHP-FPM dans le fichier de configuration du pool.

Le pool par défaut est www et son fichier de configuration est situé à / etc / php-fpm.d / www.confli (sur Centos / Rhel / Fedora) ou / etc / php / 7.4 / FPM / Pool.d / www.confli (sur Ubuntu / Debian / Mint).

$ sudo vim / etc / php-fpm.d / www.conf [sur centos / rhel / fedora] $ sudo vim / etc / php / 7.4 / FPM / Pool.d / www.conf [sur Ubuntu / Debian / Mint] 

Trouvez les directives suivantes et définissez leur valeur en fonction de votre cas d'utilisation. Pour les directives qui sont commentées, vous devez les décomiser.

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

Expliquons brièvement les directives ci-dessus et leurs valeurs. Le PM La directive détermine comment le gestionnaire de processus contrôlera le nombre de processus enfants. La méthode par défaut est dynamique, ce qui signifie que le nombre d'enfants (processus enfants) est défini dynamiquement en fonction de certaines autres directives, notamment PM.max_children qui définit le nombre maximum d'enfants qui peuvent être vivants en même temps.

Le gestionnaire de processus le plus idéal est le sur demande schéma où aucun processus d'enfant n'est créé au démarrage mais est engendré à la demande. Les processus enfants ne sont fourchés que lorsque les nouvelles demandes se connecteront en fonction de la PM.max_children et PM.process_idle_timeout qui définit le nombre de secondes après quoi un processus inactif sera tué.

Enfin et surtout, nous devons définir le PM.max_requests paramètre qui définit le nombre de demandes que chaque processus enfant doit exécuter avant de réactive. Notez que ce paramètre peut également être utilisé comme solution de contournement pour les fuites de mémoire dans les bibliothèques tierces.

Référence: Une meilleure façon d'exécuter PHP-FPM.

Après avoir effectué ces configurations ci-dessus, j'ai remarqué RAM L'utilisation est maintenant très bien sur notre serveur. Avez-vous des pensées à partager liées à ce sujet ou à ce sujet? Nous atteindre via le formulaire de rétroaction ci-dessous.