entendi corretamente o ajuste de pm.max_children

1

Eu fiz algumas investigações e descobri isso para calcular e ajustar o valor pm.max_children

link

mas por exemplo:

  • tenho 8GB no meu servidor
  • Estou hospedando 30 sites
  • tamanho médio do processo php-fpm em torno de 40mb
  • tamanho máximo do processo php-fpm em torno de 80mb
  • Quero alocar 5 Gb no máximo da minha memória para processos php-fpm

Se eu aplicar isso:

pm.max_children = RAM total dedicada ao servidor web / tamanho máximo do processo filho

Então, no meu caso:

pm.max_children = 5120/80 = 64

Mas se eu adicionar pm.max_children = 64 em cada arquivo conf do site php-fpm, isso significa que todos os sites podem usar o processo de 64 filhos X tamanho do 1 processo (ex 40mb) = 2560Mb

E se imaginarmos que, ao mesmo tempo, todos os 30 sites atingiram o valor pm.max_children, teremos: 2560Mb (máximo por site) x 30 websites = 76 800 Mb

Estou correto?

Si sim, isso significa que quando muitos sites estão hospedados no mesmo servidor, temos que dividir o resultado do cálculo pm.max_children = 5120/80 = 64 pelo número de sites hospedados (aqui 30).

Então, 64/30 = 2,1 e pm.max_children = 2 por site

É correto ou não?

Obrigado

    
por TooNetCreation 10.11.2018 / 10:39

2 respostas

0

Seu cálculo está correto pelo que eu entendi.

Ter muitas Webs no mesmo servidor funciona somente enquanto nem todas as Webs usam todos os recursos disponíveis ao mesmo tempo. Isso é o que as pessoas geralmente chamam de provisionamento excessivo.

No entanto, sugiro não simplesmente calcular pm.max_children em torno da RAM disponível, mas em torno de quantos trabalhadores são realmente necessários para que as redes funcionem corretamente. Comece com algo menor e monitore o php-fpm.log . Se a configuração max_children for atingida, você a encontrará no log e poderá aumentá-la.

Além disso, certifique-se de que os funcionários do PHP só vivam o tempo que for necessário. Por exemplo, a configuração a seguir permitirá que um pool use até 32 operadores PHP se houver um burst de solicitações, mas cada worker sairá após 3 segundos de inatividade e liberará RAM valiosa:

pm = ondemand
pm.max_children = 32
pm.process_idle_timeout = 3s

Use o gerenciador de processo ondemand se você estiver com pouca memória RAM. É um pouco mais lento que o dynamic pm, mas não desperdiça RAM para sites inativos.

Se você quiser controlar o número total de processos do PHP, existe uma configuração chamada process.max in php-fpm.conf . Eu nunca usei, mas parece-me que você poderia usá-lo para garantir que nunca haja mais do que um certo número de trabalhadores, independentemente de como os pools estão configurados.

A propósito, é uma boa idéia usar pools separados para webs separadas pertencentes a usuários separados. Dessa forma, você não terá problemas com permissões de usuário ou com dados armazenados em cache de outras Webs.

    
por 13.11.2018 / 15:49
0

Eu só posso dar um conselho com base em nossas experiências.

Temos apenas um pool PHP-FPM em execução para compartilhar recursos (CPU e RAM).

Vários pools permitem diferentes contas de usuário (por exemplo, www-data1, www-data2 ...) e podem ajudar a restringir o acesso. Além disso, você pode atribuir valores diferentes para consumo de CPU e RAM, se necessário.

No entanto, o exemplo a seguir usa apenas um pool:

; www.conf
;
; set pool management to have a fixed number of php workers
pm = static
; number of php processes (6 processes per CPU core)
pm.max_children = 48

Eu recomendo usar o gerenciamento de pool estático. Isso significa que há sempre um número fixo de trabalhadores PHP.

; www.conf
;
; redirect worker stdout and stderr into main error log
catch_workers_output = yes

Isso pode ser útil se o seu aplicativo apresentar erros.

; php-fpm.conf
;
emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10s

Isso é um monitoramento básico da vida de seus funcionários PHP em execução.

Não se esqueça de reiniciar seu serviço PHP-FPM após essas mudanças.

    
por 13.11.2018 / 14:33