PHP-FPM comendo memória e criando muitas piscinas

5

Eu configurei meu nginx com php-fpm. cada vhost tem seu próprio soquete unix e POOL separado.
Mas o problema é que o php-fpm está criando 7 threads para cada pool de configuração que eu criei em /etc/php5/fpm/pool.d/

por quê? e como eu poderia definir que o pool cria apenas quando a url relacionada ao VHOST é vista.

    
por r004 19.12.2013 / 16:22

2 respostas

8

O número de filhos é controlado pelas diretivas de configuração do gerenciador de processos no arquivo de configuração do conjunto. Eu acho que as configurações atuais são pm = static com pm.max_children = 6 ou pm = dynamic com pm.start_servers = 6 . Um processo seria o processo de controle, os outros seriam crianças prontas para lidar com solicitações. Se você tiver apenas 5 e não 6 filhos configurados, devo confessar que não sei para que esse último processo é usado. Em grandes sites de alto rendimento, uma configuração como essa com muitos filhos prontos para uso faz sentido, mas em um ambiente restrito à memória (provavelmente virtual) onde você espera que scripts PHP sejam executados de vez em quando, uma configuração diferente pode ser mais apropriado.

Para isso, edite os arquivos de configuração do pool e defina pm = ondemand . Em seguida, os filhos serão criados apenas para lidar com solicitações. Isso significará menos consumo de memória enquanto nenhuma solicitação estiver ativa, embora também possa significar mais tempo necessário para criar um filho. O último pode ser reduzido escolhendo um pm.process_idle_timeout razoável, de modo que um número razoável de processos php permaneça inativo, enquanto os usuários poderão usá-los novamente em breve. Esse "número sã" é controlado por pm.max_children .

Nota: Este conselho é baseado na minha experiência com o Debian 7, mas também deve ser aplicado ao Ubuntu.

    
por MvG 19.12.2013 / 18:38
0

Muitas pessoas incentivam o uso de pm = ondemand para economizar memória. No entanto, isso também significa que o seu tempo até o primeiro byte (ou resposta do servidor) será muito grande, pois se o seu servidor da Web não tiver visitas recentes, o módulo php-fpm precisará primeiro criar um filho antes de responder a uma solicitação. Se você usar pm = dynamic, isso significa que você sempre terá pelo menos uma criança pronta para responder a uma solicitação do cliente. O seguinte irá carregar 1 criança por usuário após reiniciar o php-fpm

pm=dynamic
pm.start_servers=1
pm.min_spare_servers=1
    
por Nicolas Guérinet 12.09.2015 / 09:51

Tags