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_servers
e 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.MaxSpareThreads
StartServers
ThreadLimit
Minha pergunta é: como essas configurações se relacionam? Digamos que eu configurei StartServers=2
e 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.