Déterminer le nombre correct de processus enfants pour PHP-FPM

Catégorie: Serveurs cloud

CentOS Debian Linux Nginx PHP

Vous pouvez ressentir les effets d'une mauvaise configuration des processus enfants si votre site web a des problèmes de performance, une utilisation élevée des ressources, ou des messages d'erreur dans votre fichier php-fpm.log tels que :

[pool www] server reached pm.max_children setting (x), consider raising it
[pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers)

D'autres exemples de problèmes communs qui indiquent un besoin de réglage de PHP-FPM:

  • Lenteur du site web ou de l'application et retards dans le traitement des requêtes
  • Utilisation élevée du CPU ou de la mémoire : un trop grand nombre de processus peut surcharger votre serveur, tandis qu'un nombre insuffisant peut ralentir le temps de réponse.
  • Erreurs 502/504 de dépassement de délai de la passerelle

Tous ces symptômes vous indiquent que vous n'avez pas assez de place pour les requêtes (processus enfants) dans votre processus PHP-FPM. Corrigeons cela !

Déterminer le nombre correct de processus pour PHP-FPM

Avec la journalisation en temps réel, il est facile de déterminer les paramètres corrects pour la configuration de php-fpm sur votre serveur. Les paramètres exacts sont basés sur la mémoire disponible sur votre serveur cloud, mais sachez que vous devez également prendre en compte les autres processus, qui utilisent également ces ressources (exemples: MariaDB, MySQL, Redis). N'utilisez jamais simplement 100 % de la mémoire disponible dans le serveur en nuage !

Les étapes suivantes doivent être ajustées dans le fichier /etc/php/8.2/fpm/pool.d/www.conf (emplacement typique sur un serveur Linux Debian, mais ça peut varier) :

pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 4
pm.max_spare_servers = 8

Pour trouver les valeurs correctes, vous devrez mesurer la quantité de mémoire consommée par un seul processus PHP.

Attention! Cela n'est possible que sur un serveur où le site web a une utilisation stable de la mémoire par processus. Si le pool FPM est utilisé par plusieurs sites web ayant des besoins différents, l'utilisation de la mémoire des processus peut varier considérablement. Il sera alors difficile de déterminer l'utilisation moyenne.

La ligne suivante (exécutée dans l'interpréteur de commandes) vous fournira des informations utiles :

ps -ylC php-fpm8.2 --sort:rss

Le nom php-fpm8.2 correspond au nom de votre processus. Il est possible qu'il ait un nom différent sur votre serveur, cela dépend des paquets PHP utilisés.

Vous devriez être en mesure de trouver le nom de processus correct comme ceci :

ps -e | grep php-fpm

La colonne RSS contient l'utilisation moyenne de la mémoire en kilo-octets par processus.

S UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME CMD
S 0 24439 1 0 80 0 6364 57236 - ? 00:00:00 php-fpm8.2
S 33 24701 24439 2 80 0 61588 63335 - ? 00:04:07 php-fpm8.2
S 33 25319 24439 2 80 0 61620 63314 - ? 00:02:35 php-fpm8.2

Dans cet exemple, 61588 kilo-octets, soit environ +- 60 Mo par processus.

Une autre option consiste à obtenir la moyenne d'un processus php-fpm :

ps --no-headers -o "rss,cmd" -C php-fpm8.2 | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"Mb") }'

Calcul de pm.max_children

Pour obtenir la valeur correcte du nombre de pm.max_children, nous devons vérifier la quantité de mémoire que notre serveur cloud peut utiliser pour le processus php-fpm et diviser ce total par la taille moyenne en Mo du processus que nous venons de vérifier.

Un exemple :

Notre serveur cloud dispose de 4 Go de RAM.
Nous avons également un service de base de données MariaDB qui tourne sur le serveur. MariaDB utilise au moins 1 Go de RAM.
Il nous reste donc 3 Go de RAM, mais nous devons garder une marge. Dans ce cas, nous prenons 0,5 Go.

Si nous prenons cette marge en compte, il nous reste 2560 Mo (soit environ 2,5 Go de RAM) pour nos processus PHP.

Nous divisons notre mémoire libre par la quantité utilisée par un processus PHP. Cela nous donne la quantité maximale de processus :

2560 Mo / 60 Mo = 42 processus

Ainsi, pm.max_children nous amène à 42 max_children
Ceci peut être utilisé pour mettre à jour le fichier de configuration du pool php-fpm.

Nous avons fait les changements suivants :

pm.max_children = 40
pm.start_servers = 15
pm.min_spare_servers = 15
pm.max_spare_servers = 25
pm.max_requests = 500

Redémarrez le service php-fpm8.2 et voyez si le serveur se comporte correctement et alloue de la mémoire comme configuré.

Bonus : en spécifiant le pm.max_requests, vous demandez à PHP de "recycler" son processus après un nombre X de requêtes (dans notre cas, 500).
Cela signifie qu'une fois que le processus a dépassé 500 requêtes, il sera recréé. Cela peut être utile pour contourner les fuites de mémoire dans les bibliothèques tierces.
Ou, comme expliqué dans la documentation officielle de PHP : Le nombre de requêtes que chaque processus enfant doit exécuter avant de réapparaître.

Avez-vous besoin d'aide pour l'optimisation de PHP-FPM ou pour un hébergement performant ?

Configurer le bon nombre de processus enfants pour PHP-FPM est crucial pour s'assurer que votre serveur fonctionne efficacement sans goulots d'étranglement. Que vous ayez des temps de réponse lents, une utilisation élevée des ressources ou des erreurs fréquentes, un réglage adéquat peut faire une différence significative.

Chez Kinamo, nous sommes spécialisés dans l'optimisation des environnements d'hébergement pour des performances et une stabilité maximales. Si vous avez besoin de conseils d'experts sur la configuration de PHP-FPM, l'hébergement géré ou l'optimisation de serveur, notre équipe est là pour vous aider. Contactez-nous dès aujourd'hui pour discuter de vos besoins et vous assurer que votre environnement d'hébergement fonctionne parfaitement.


Articles connexes

Vous souhaitez acheter un certificat SSL ? Qu'est-ce qu'un certificat SSL ?

Découvrez ce qu'est un certificat SSL, pourquoi il est essentiel pour sécuriser un site et comment acheter facilement un certificat...

En savoir plus

Créer un filtre anti-spam avec le Kinamo Webmail

Avez-vous une adresse e-mail chez Kinamo ? Découvrez ici comment créer un filtre spécial via Kinamo Webmail pour garder les...

En savoir plus

Mon adresse électronique est-elle protégée contre le courrier indésirable ou le spam ?

Chez Kinamo, le filtrage anti-spam est très strict. Si vous lisez cet article, vous cherchez sans doute une solution contre...

En savoir plus

Besoin d'aide supplémentaire?

Vous n'avez pas obtenu de réponse à toutes vos questions?
Ne vous inquiétez pas, faites une demande d'assistance!

Kinamo

Sélectionnez votre langue

Toutes les langues: