Relação entre configurações PHP-FPM e mpm_worker (Apache)

Relação entre configurações PHP-FPM e mpm_worker (Apache)

Eu tenho um site rodando Magento na seguinte configuração:

  • Apache 2.4 com mpm_worker
  • PHP-FPM
  • RAM total no servidor: 14 GB (10 GB disponíveis para Apache/PHP)

Cada processo PHP-FPM consome aproximadamente 80 MB de RAM.

Quero ajustar as configurações de PHP-FPM e mpm_worker. Lendo a documentação estou um pouco confuso sobre a relação entre as opções em PHP-FPM e mpm_worker.

Por exemplo, PHP-FPM tem configurações: pm.min_spare_servers, pm.max_spare_servers, pm.start_serverse max_children. Entendo o que essas opções significam em relação ao PHP-FPM.

No entanto , mpm_worker possui as seguintes configurações: MinSpareThreads, e . Novamente, isolado em mpm_worker, entendo o que eles fazem.MaxSpareThreadsStartServersThreadLimit

Minha pergunta é: como essas configurações se relacionam? Digamos que eu configurei StartServers=2e ThreadsPerChild=25. Isso me daria 50 threads para começar em relação ao Apache/mpm_worker. Se eu definir pm.start_servers = 50, o PHP-FPM gerará 50 processos inicialmente.

Então, qual é a relação entre esses 50 threads “Apache” e 50 processos “PHP-FPM”? Cada thread do Apache utiliza um processo PHP-FPM?

Espero que alguém possa dar algumas dicas sobre isso.

Obrigado!

Responder1

O Apache atende as solicitações dos clientes usando os filhos dos threads, mas só chamará PHP-FPM para arquivos php - imagens, css e js devem ser servidos diretamente do Apache e, portanto, não consumirão um thread PHP-FPM.

PHP-FPM possui vários threads sem filhos - cada thread atende a uma solicitação do Apache.

AFAIK, várias solicitações do mesmo cliente (carregando a página, além de imagens, css e js) devem consumir vários threads se você não tiver o KeepAlive definido no Apache.Veja este linkpara mais informações sobre KeepAlive.

Recentemente, estive ajustando um servidor Apache e descobri que, se você tiver vários núcleos, é melhor aumentar o número de filhos por thread.

Responder2

O relacionamento é mapeado dinamicamente. São processos separados que também podem ser executados em servidores separados, portanto você tem muitas opções de configuração.

Os processos/threads do Apache lidam com conexões iniciais que então usam processos php-fpm para analisar arquivos PHP para retornar solicitações.

Existem muitas variáveis ​​​​aqui para aconselhá-lo sobre como configurá-las, mas geralmente configure o Apache para que ele tenha threads suficientes para lidar com solicitações em tempo real e configure o php-fpm para que seus scripts/sites PHP tenham memória suficiente para executar. Com várias opções de cache possíveis, isso só pode ser decidido através da avaliação comparativa de um sistema em execução.

informação relacionada