web-dev-qa-db-fra.com

php5-fpm: le serveur a atteint pm.max_children

J'ai Nginx + php5-fpm. Plusieurs fois par heure, mon site Web se bloque et dans le fichier journal, je vois ce qui suit:

AVERTISSEMENT: le serveur [pool www] a atteint le paramètre pm.max_children (5), envisagez de le relever.

/ etc/php5/fpm/pool.d/www.conf le fichier contient la configuration suivante:

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Serveur: AMD Opteron ™ 3280, Octo-Core, 8x 2,4 GHz, DIMM 16 Go (DDR3).

Je n'ai aucune idée quels nombres dois-je mettre dans le fichier www.conf pour ce serveur. Puis-je aider quelqu'un? Merci

44
user1821484

Il existe de nombreuses raisons possibles pour lesquelles votre PHP-FPM atteindrait le max_children. Les plus courants sont:

  • Beaucoup de demandes parallèles de vos clients
  • Exécution lente des scripts PHP
  • Réglage très bas du max_children

En regardant les spécifications de votre machine, en supposant qu'il n'y a rien d'autre que PHP + Nginx en cours d'exécution, je pense que vous pouvez le définir beaucoup plus haut que 5. Vous dites que vous avez 8 cœurs, généralement Nginx a besoin de beaucoup moins de CPU que PHP, donc avec 5 enfants vous ne pourrez probablement jamais les utiliser tous. Je le règle généralement sur quelque chose comme nombre de cœurs x 2 ou nombre de cœurs x 4, en fonction de la consommation de mémoire de votre PHP scripts.

41
replay

J'ai trouvé qu'en définissant la valeur pm.max_requests (qui est commentée par défaut) a aidé à corriger ces erreurs. Ce paramètre force les requêtes enfants à réapparaître après avoir exécuté un certain nombre de requêtes et peut être utile s'il y a des fuites de mémoire quelque part dans votre code ou dans des bibliothèques tierces.

Dans / etc/php-fpm.d/www.conf:

pm.max_requests = 500
21
Tom Jowitt

Cette lien peut être utile - elle explique comment calculer le nombre de processus enfants en fonction de la quantité de mémoire sur le système:

14
HTF