php-fpm: ajuda a entender start_servers, min_spare_servers, max_spare_servers

10

Eu estou tentando sintonizar minha instalação do php-fpm para o meu servidor, e eu tenho dificuldade para descobrir o que fazer com as pm.start_servers, pm.min_spare_serverse pm.max_spare_serversvariáveis. estou usandopm = dynamic

pm.max_childrené perfeitamente claro. Cada processo filho atende 1 cliente da Web ao mesmo tempo. Está bem. O que é um "servidor", então? Claramente, com base na configuração padrão que tenho, um servidor pode atender a mais de um filho. Qual é o limite superior? O que devo usar como regra geral para o número de filhos / servidor? Ou é algo relacionado? Em algum fórum, alguém estava afirmando que o número de servidores deveria ter 2 x # de núcleos de CPU, mas vi configurações recomendadas em que o número era muito maior, 40-50.

Nem a documentação do PHP nem os muitos artigos "tuning php-fpm" disponíveis foram úteis.

Bintz
fonte

Respostas:

13

Basicamente, o número de processos que o php-fpm terá em execução a qualquer momento é muito configurável quando você define dynamiccomo deseja. Quando definido como static, SEMPRE haverá muitos processos filhos em execução. Geralmente, você o define como dinâmico para economizar recursos. Cada processo filho pode lidar com uma solicitação. O limite superior depende de quão pesado é seu aplicativo php e de quanto tráfego você recebe. Você também deve calcular a média do consumo de memória de cada filho e certificar-se de que NUNCA permita que o número de filhos exceda a quantidade de memória ram instalada no servidor ou você começará a trocar ou até o kernel iniciar os processos de morte.

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

Ao definir essas opções, considere o seguinte:

  • Quanto tempo dura o seu pedido médio?
  • Qual é o número máximo de visitantes simultâneos que os sites recebem?
  • Quanta memória, em média, cada processo filho consome?
gbolo
fonte
3
Muito útil, obrigado pela compreensão. Também útil para cálculo, use isso ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'para ver quanta memória cada trabalhador possui. retirado de community.webcore.cloud/tutorials/…
Matt The Ninja