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.
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.
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.
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)
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é.
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)
Utilisez cette commande pour obtenir la mémoire vive totale :
awk '/MemTotal/ {print "Total memory:", $2/1024 "MB"}' /proc/meminfo
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
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"}'
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 :
Alors :
mémoire à allouer = 23944 - (11475 - 1218)
mémoire à allouer = 13687 MB
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
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.