web-dev-qa-db-fra.com

PHP-FPM consomme de la mémoire et crée de nombreux pools

J'ai mis en place mon nginx avec php-fpm. chaque vhost a son propre unix-socket et POOL séparé.
Mais le problème est que php-fpm crée 7 threads pour chaque pool de configuration que j'ai créé dans /etc/php5/fpm/pool.d/

pourquoi? et comment définir le pool créé uniquement lorsque l’URL associée à VHOST est visualisée.

enter image description here

5
r004

Le nombre d'enfants est contrôlé par les directives de configuration du gestionnaire de processus dans le fichier de configuration du pool. Je suppose que les paramètres actuels sont soit pm = static avec pm.max_children = 6, soit pm = dynamic avec pm.start_servers = 6. Un processus serait le processus de contrôle, les autres seraient des enfants prêts à traiter les demandes. Si vous n'avez que 5 enfants configurés pas 6, alors je dois avouer que je ne sais pas à quoi sert ce dernier processus. Sur les grands sites à haut débit, une telle configuration avec de nombreux enfants prêts à l'emploi est logique, mais dans un environnement à mémoire limitée (probablement virtuelle) où vous ne devez attendre que des scripts PHP soient exécutés de temps en temps. , une configuration différente pourrait être plus appropriée.

Pour ce faire, éditez les fichiers de configuration du pool et définissez pm = ondemand . Ensuite, les enfants seront créés uniquement pour gérer les demandes. Cela signifie une consommation de mémoire moindre alors qu'aucune demande n'est active, bien que cela puisse également impliquer plus de temps pour créer un enfant. Ce dernier peut être réduit en choisissant un pm.process_idle_timeout raisonnable, de sorte qu'un nombre raisonnable de processus php reste inactif, alors que les utilisateurs peuvent normalement les utiliser à nouveau. Ce "numéro sain" est contrôlé par pm.max_children .

Remarque: Ce conseil est basé sur mon expérience de Debian 7, mais il devrait également s'appliquer à Ubuntu.

9
MvG

Beaucoup de gens encouragent l'utilisation de pm = ondemand pour économiser de la mémoire. Cependant, cela signifie également que votre temps de passage au premier octet (ou à la réponse du serveur) va être très important, car si votre serveur Web n'a pas eu de visites récentes, le module php-fpm devra d'abord créer un enfant avant de répondre à une demande. Si vous utilisez pm = dynamic, cela signifie que vous aurez toujours au moins 1 enfant prêt à répondre à une demande du client. Ce qui suit chargera 1 enfant par utilisateur après le redémarrage de php-fpm

pm=dynamic
pm.start_servers=1
pm.min_spare_servers=1
0
Nicolas Guérinet