Configurer PHP FPM (pm.max_children)

Cet article offre des conseils pour optimiser le paramètre `pm.max_children` en fonction des ressources disponibles sur votre serveur.


Qu'est-ce que PHP-FPM

PHP-FPM (FastCGI Process Manager) est une version alternative de PHP FastCGI, avec des fonctionnalités supplémentaires utiles pour les sites à fort trafic. Il permet de gérer un pool de processus PHP pour traiter les requêtes web, ce qui améliore les performances et la gestion des ressources.

Modes de configuration du Process Manager

OnDemand

Le mode de configuration OnDemand de PHP-FPM est conçu pour créer et détruire des processus PHP en fonction des besoins. Cela signifie que les processus sont uniquement lancés lorsqu'une requête est reçue et sont terminés après une période d'inactivité. Ce mode est particulièrement avantageux pour les environnements où la charge varie considérablement.

Avantages du mode OnDemand

  • Économie de ressources : Les processus PHP ne sont actifs que lorsqu'ils sont nécessaires, réduisant ainsi l'utilisation de la mémoire et du CPU.

Inconvénients du mode OnDemand

  • Latence de la première requête : Lorsqu'une nouvelle requête arrive et qu'il n'y a pas de processus actif, le temps de démarrage peut introduire un délai.
  • Gestion plus complexe : La gestion dynamique des processus peut être plus difficile à optimiser et à surveiller.

Dynamic

Le mode Dynamic est un autre mode de configuration de PHP-FPM où un nombre minimum de processus est maintenu actif en permanence, et des processus supplémentaires sont créés en fonction de la demande jusqu'à un maximum défini.

Avantages du mode Dynamic

  • Réactivité : Une partie des processus est toujours prête à traiter les requêtes, réduisant ainsi la latence.
  • Adaptabilité : Capable de s'adapter à des variations modérées de la charge.

Inconvénients du mode Dynamic

  • Consommation de ressources : Maintenir des processus actifs en permanence utilise plus de mémoire et de CPU par rapport au mode OnDemand.
  • Complexité de configuration : Nécessite une bonne estimation des paramètres pour éviter des situations de surcharge ou de sous-utilisation.

Configuration de pm.max_children

Le paramètre pm.max_children joue un rôle crucial dans la gestion des ressources et des performances de votre serveur. Il définit le nombre maximum de processus enfants PHP qui peuvent être créés simultanément par PHP-FPM.

Pour déterminer la valeur adéquate pour pm.max_children, utilisez la formule suivante :

max_children = (mémoire à allouer) / (mémoire utilisée en moyenne par processus PHP)

Récupération de la mémoire utilisée en moyenne par PHP

Cette commande calcule la mémoire moyenne utilisée par les processus PHP en cours d'exécution sur un serveur Linux :

ps --no-headers -eo rss,comm | grep php | awk '{sum+=$1; count++} END {if (count > 0) print "Average Memory Usage (KB):", sum/count; else print "No PHP processes found."}'

! Cette valeur est à prendre avec précaution, car elle est calculée à un instant donné.

Récupération de la mémoire à allouer à PHP

Pour définir la mémoire à allouer à PHP, utilisez la formule suivante :

mémoire à allouer = mémoire vive totale - (mémoire utilisée - mémoire utilisée par PHP-FPM)

Récupération de la mémoire vive totale

Utilisez cette commande pour obtenir la mémoire vive totale :

awk '/MemTotal/ {print "Total memory:", $2/1024 "MB"}' /proc/meminfo

Récupération de la mémoire vive utilisée

Utilisez cette commande pour obtenir la mémoire utilisée par tous les processus :

awk '/MemTotal/ {total=$2} /MemFree/ {free=$2} /Buffers/ {buffers=$2} /^Cached/ {cached=$2} END {used=total-free-buffers-cached; print "Used memory:", used/1024 "MB"}' /proc/meminfo

Récupération de la mémoire vive utilisée par PHP

Utilisez cette commande pour obtenir la mémoire utilisée par les processus PHP :

ps --no-headers -o rss -C php | awk '{sum+=$1} END {print "PHP used memory:", sum/1024 "MB"}'

Calcul de la mémoire à allouer

En utilisant ces données, nous pouvons calculer la mémoire vive à allouer à PHP-FPM :

mémoire à allouer = mémoire vive totale - (mémoire utilisée - mémoire utilisée par PHP-FPM)

Supposons les valeurs suivantes obtenues par les commandes précédentes :

  • Mémoire vive totale : 23944 MB
  • Mémoire utilisée : 11475 MB
  • Mémoire utilisée par PHP : 1218 MB

Alors :

mémoire à allouer = 23944 - (11475 - 1218)
mémoire à allouer = 13687 MB

Détermination de pm.max_children

Maintenant que nous avons la mémoire à allouer (13687 MB), nous pouvons calculer pm.max_children en utilisant la mémoire moyenne par processus PHP. Supposons que cette valeur moyenne soit de 30 MB (après arrondi) :

max_children = 13687 / 30
max_children = 456

Mise à jour de la configuration

Modifiez le fichier de configuration de pool de PHP-FPM pour appliquer cette nouvelle valeur :

/etc/php/8.3/fpm/pool.d/www.conf

Recherchez la ligne contenant pm.max_children et modifiez-la avec la valeur calculée :

pm.max_children = 456

Enfin, redémarrez PHP-FPM pour appliquer les modifications :

sudo systemctl restart php8.3-fpm

En suivant ces étapes, vous pouvez optimiser la configuration de PHP-FPM pour une utilisation efficace des ressources et une meilleure performance de votre serveur.


Image de profil - Stéphane MULOT

Stéphane MULOT

Développeur PHP (Symfony / Laravel)