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.
Stéphane MULOT