php-fpm: ayuda a comprender start_servers, min_spare_servers, max_spare_servers

10

Estoy tratando de sintonizar mi instalación de PHP-FPM para mi servidor, y no tengo problemas para averiguar qué hacer con los pm.start_servers, pm.min_spare_serversy pm.max_spare_serverslas variables. estoy usandopm = dynamic

pm.max_childrenEstá perfectamente claro. Cada proceso secundario sirve a 1 cliente web a la vez. Okay. ¿Qué es un "servidor", entonces? Claramente, según la configuración predeterminada que tengo, 1 servidor puede servir a más de 1 hijo. ¿Cuál es el límite superior? ¿Qué debo usar como regla general para el número de niños / servidores? ¿O está relacionado en absoluto? En algún foro, alguien afirmaba que # de servidores debería ser 2 x # de núcleos de CPU, pero he visto configuraciones recomendadas donde el número era mucho mayor, 40-50.

Ni la documentación de PHP ni los muchos artículos de "ajuste de php-fpm" han sido de mucha ayuda.

Bintz
fuente

Respuestas:

13

Básicamente, la cantidad de procesos que php-fpm se ejecutará en cualquier momento es muy configurable cuando configuras dynamiccomo lo haces. Cuando se establece en staticque habrá SIEMPRE ser que muchos procesos hijo corriendo. Generalmente lo configura en dinámico para conservar recursos. Cada proceso secundario puede manejar una solicitud. El límite superior depende de qué tan pesada sea su aplicación php y cuánto tráfico obtenga. También debe calcular el consumo promedio de memoria de cada niño y asegurarse de que NUNCA permita que el número de niños exceda la cantidad de ram instalada en su servidor o comenzará a intercambiar o incluso hará que el núcleo comience a matar procesos.

; 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.

Al configurar estas opciones, tenga en cuenta lo siguiente:

  • ¿Cuánto dura su solicitud promedio?
  • ¿Cuál es el número máximo de visitantes simultáneos que recibe el sitio?
  • ¿Cuánta memoria en promedio consume cada proceso secundario?
gbolo
fuente
3
Muy útil, gracias por la información. También es útil para el cálculo, use esto ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'para ver cuánta memoria tiene cada trabajador. tomado de community.webcore.cloud/tutorials/…
Matt The Ninja