php5-fpm: o servidor atingiu pm.max_children

35

Eu tenho Nginx + php5-fpm. Várias vezes por hora meu site stucks e no logfile vejo o seguinte:

    WARNING: [pool www] server reached pm.max_children setting (5), 
consider raising it.
O arquivo

/etc/php5/fpm/pool.d/www.conf contém a seguinte configuração:

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Servidor: AMD Opteron ™ 3280, Octo-Core, 8x 2,4 GHz, DIMM de 16 GB (DDR3).

Eu não tenho idéia de quais números devo colocar no arquivo www.conf para este servidor. Posso me ajudar alguém? Obrigado

    
por user1821484 16.02.2013 / 11:30

3 respostas

36

Existem muitas razões possíveis para o seu PHP-FPM atingir o max_children. Os mais comuns são:

  • Muitas solicitações paralelas de seus clientes
  • Execução lenta dos scripts PHP
  • Configuração muito baixa do max_children

Olhando as especificações da sua máquina, assumindo que não há nada mais do que PHP + Nginx rodando, eu acho que você poderia configurar muito mais do que 5. Você diz que tem 8 núcleos, geralmente o Nginx precisa de muito menos CPU que o PHP com 5 filhos você provavelmente nunca conseguirá usar todos eles. Normalmente, estou configurando para algo como o número de núcleos x 2 ou o número de núcleos x 4, dependendo do consumo de memória de seus scripts PHP.

    
por 16.02.2013 / 14:50
16

Descobri que, ao definir o valor de pm.max_requests (que é comentado por padrão), ajudou a corrigir esses erros. Essa configuração força as solicitações de filhos a reaparecer após a execução de um determinado número de solicitações e pode ser útil se houver vazamentos de memória em algum lugar em seu código ou bibliotecas de terceiros.

Em /etc/php-fpm.d/www.conf :

pm.max_requests = 500
    
por 27.02.2014 / 10:46
9

Este link pode ser útil - explica como calcular o número de processos filhos com base na quantidade de memória no sistema:

    
por 27.02.2014 / 10:54