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
Il existe de nombreuses raisons possibles pour lesquelles votre PHP-FPM atteindrait le max_children
. Les plus courants sont:
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.
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
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: