php-fpm: aide à la compréhension des start_servers, min_spare_servers, max_spare_servers

10

Je suis en train de régler mon installation php-fpm pour mon serveur, et j'ai mal à comprendre ce qu'il faut faire avec les pm.start_servers, pm.min_spare_serverset les pm.max_spare_serversvariables. j'utilisepm = dynamic

pm.max_childrenest parfaitement clair. Chaque processus enfant dessert 1 client Web à la fois. D'accord. Qu'est-ce qu'un "serveur", alors? De toute évidence, sur la base de la configuration par défaut que j'ai, 1 serveur peut servir plus d'un enfant. Quelle est la limite supérieure? Que dois-je utiliser en règle générale pour le nombre d'enfants / serveur? Ou est-ce lié du tout? Sur un forum, quelqu'un prétendait que le nombre de serveurs devrait être 2 x # de cœurs de processeur, mais j'ai vu des configurations recommandées où le nombre était beaucoup plus élevé, 40-50.

Ni la documentation PHP ni les nombreux articles "tuning php-fpm" n'ont été utiles.

Bintz
la source

Réponses:

13

Fondamentalement, le nombre de processus que php-fpm devra exécuter à tout moment est très configurable lorsque vous définissez dynamiccomme vous le faites. Lorsqu'il est défini sur staticil y aura TOUJOURS autant de processus enfants en cours d'exécution. En règle générale, vous le définissez sur dynamique pour économiser les ressources. Chaque processus enfant peut gérer une demande. La limite supérieure dépend du poids de votre application php et du trafic que vous obtenez. Vous devez également calculer la consommation de mémoire moyenne de chaque enfant et vous assurer que vous ne permettez JAMAIS au nombre d'enfants de dépasser la quantité de RAM installée sur votre serveur, sinon vous commencerez à échanger ou même à ce que le noyau commence à tuer les processus.

; Choose how the process manager will control the number of child processes.
; Possible Values:
;   static  - a fixed number (pm.max_children) of child processes;
;   dynamic - the number of child processes are set dynamically based on the
;             following directives:
;             pm.max_children      - the maximum number of children that can
;                                    be alive at the same time.
;             pm.start_servers     - the number of children created on startup.
;             pm.min_spare_servers - the minimum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is less than this
;                                    number then some children will be created.
;             pm.max_spare_servers - the maximum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is greater than this
;                                    number then some children will be killed.
; Note: This value is mandatory.

Lors de la définition de ces options, tenez compte des éléments suivants:

  • Quelle est la durée moyenne de votre demande?
  • Quel est le nombre maximum de visiteurs simultanés sur le (s) site (s)?
  • Combien de mémoire en moyenne chaque processus enfant consomme-t-il?
gbolo
la source
3
Très utile, merci pour la perspicacité. Également utile pour le calcul, utilisez ceci ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'pour voir la quantité de mémoire dont dispose chaque travailleur. extrait de community.webcore.cloud/tutorials/…
Matt The Ninja