Déterminer le nombre de processes valide pour PHP-FPM sur NGinx

Dernière mise à jour sur 6 sept. 2023 à 13:16:51.
Catégorie: Serveurs cloud

CentOS Debian Linux Nginx PHP

Introduction

Si vous utilisez un serveur Web NGinx avec PHP-FPM, vous devrez probablement ajuster les paramètres "prêts à l'emploi" de php-fpm. Si votre fichier php-fpm.log contient l'erreur suivante :

[26-Mar-2018 10:10:04] WARNING: [pool www] server reached pm.max_children setting (35), consider raising it
[26-Mar-2018 12:04:52] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers)

Cela signifie-t-il qu'il n'y a pas assez de processus disponibles pour php-fpm.

Détermination correcte du nombre de processus

Vous pouvez calculer sur la base des données de journalisation en temps réel quels sont les paramètres corrects pour la configuration php-fpm sur votre serveur. Les paramètres précis dépendent de la mémoire disponible sur votre serveur cloud. Tenez également compte des autres processus également utilisés (par exemple, MariaDB, MySQL, Redis). N'utilisez donc jamais 100% de la mémoire allouée à la machine comme point de départ !

Vous devez modifier les valeurs suivantes dans le fichier /etc/php/fpm/pool.d/www.conf (le chemin peut différer selon la version de PHP que vous utilisez) :
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 4
pm.max_spare_servers = 8

Pour calculer les valeurs correctes, vous devez savoir combien de mémoire un processus occupe. Attention, vous ne pouvez mesurer cela que sur un serveur dont vous savez que le site en question a une consommation mémoire par processus stable, autrement dit pour un environnement d'hébergement mutualisé avec différents sites web et donc une programmation différente, la consommation mémoire par processus PHP fluctuera fortement !
Utilisez la commande suivante (via SSH) pour obtenir une sortie en temps réel des processus et de leur consommation de mémoire :

ps -ylC php-fpm --sort:rss
Le nom php-fpm correspond au nom du processus. Il est possible que le nom exact du processus diffère en fonction de la version de PHP sur votre serveur.

La colonne RSS indique la consommation mémoire moyenne 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-fpm
S 33 24701 24439 2 80 0 61588 63335 - ? 00:04:07 php-fpm
S 33 25319 24439 2 80 0 61620 63314 - ? 00:02:35 php-fpm
Dans notre cas, il s'agit d'environ 61588 kilo-octets convertis +- 60 Mo par processus.

Une autre option consiste à obtenir la taille moyenne d'un processus php-fpm :
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"Mb") }'

Pour calculer la valeur correcte du nombre de pm.max_children, nous devons voir combien de mémoire le serveur cloud peut avoir pour le processus php-fpm et diviser cela par la taille moyenne en Mo de notre processus que nous venons de demander.

Calculer pm.max_children

Un exemple, si notre serveur cloud dispose de 4 Go de RAM et qu'une base de données MariaDB est en cours d'exécution sur laquelle au moins 1 Go sera utilisé par le processus MySQL, alors nous devrions prendre comme point de départ 4 - 1 - 0,5 (marge) Go = 2,5 Go de RAM ou 2560 Mo.

pm.max_children nous amène alors à 2560 Mo / 60 Mo = 42 max_children

Nous avons apporté les modifications suivantes à notre fichier www.conf dans le pool php-fpm :
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-fpm et vérifiez si le serveur alloue correctement la mémoire.


Articles connexes

Paramètres des serveurs mail Kinamo (feuille de triche)

L'article suivant vous donne un résumé de la configuration et noms du serveurs mail de Kinamo. Avec la liste ici...

En savoir plus

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

L'article suivant vous explique comment ajouter un filtre spécial pour mettre des messages SPAM automatiquement dans un dossier dans votre...

En savoir plus

Acheter un certificat SSL? Qu'est un certificat SSL?

Vous voulez acheter un certificat SSL? Mais, c'est quoi un certificat SSL? Et pourquoi est-ce que tous le monde dit...

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!

Sélectionnez votre langue

Toutes les langues: