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

3

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

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

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

Eu quero ajustar as configurações do PHP-FPM e do mpm_worker. Lendo na documentação estou um pouco confuso sobre a relação entre as opções no PHP-FPM e no mpm_worker.

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

No entanto, o mpm_worker tem as seguintes configurações: MinSpareThreads , MaxSpareThreads , StartServers e ThreadLimit . Mais uma vez, isolado para mpm_worker eu entendo o que eles fazem.

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

Então qual é a relação entre esses 50 "Apache" threads e 50 processos "PHP-FPM"? Cada encadeamento Apache utiliza um processo PHP-FPM?

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

Obrigado!

    
por JanC 13.05.2014 / 21:05

2 respostas

0

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

Os processos / encadeamentos do Apache lidam com conexões iniciais que, em seguida, usam processos php-fpm para analisar arquivos PHP para solicitações de retorno.

Existem muitas variáveis aqui para aconselhá-lo sobre como configurar o, mas geralmente configurar o apache para que ele tenha threads suficientes para manipular pedidos em tempo real e configurar o php-fpm para que seus scripts / wensites tenham memória suficiente para correr. Com várias opções possíveis de armazenamento em cache, isso só pode ser decidido com o benchmarking de um sistema em execução.

    
por 13.05.2014 / 21:53
0

O Apache atende as requisições dos clientes usando os childs do encadeamento, mas ele só chama PHP-FPM para arquivos php - imagens, css e js devem ser servidos diretamente do Apache e, portanto, não consomem um encadeamento PHP-FPM .

O PHP-FPM tem vários threads sem childs - cada thread atende a um pedido 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 segmentos se você não tiver o KeepAlive configurado no Apache. Veja este link para mais informações sobre o KeepAlive.

Eu mesmo tenho ajustado um servidor Apache recentemente e descobri que, se você tiver vários núcleos, é melhor aumentar o número de childs por thread.

    
por 23.05.2014 / 18:46