Sobes.tech
Middle

O que é PHP-FPM?

sobes.tech IA

Resposta da IA

O PHP-FPM (FastCGI Process Manager) é um gestor de processos FastCGI para PHP, alternativa ao padrão PHP FastCGI. Proporciona melhor desempenho ao processar pedidos web em ambientes de alta carga. O FPM gere um grupo de processos PHP que aguardam pedidos de entrada do servidor web (por exemplo, Nginx ou Apache através do módulo mod_proxy_fcgi).

Características e vantagens principais do FPM:

  • Pool de processos: O FPM cria e gere um conjunto de processos PHP. Estes processos podem ser estáticos (número fixo), dinâmicos (criados conforme necessário dentro de limites definidos) ou sob demanda (criados ao receber um pedido e destruídos após o processamento). Isto permite uma utilização eficiente dos recursos do sistema.
  • Melhor escalabilidade: Graças à gestão do grupo de processos, o FPM pode lidar com múltiplos pedidos simultaneamente, o que é crítico para aplicações de alta carga.
  • Separação de processos: Cada pedido é processado por um processo FPM separado, o que aumenta a estabilidade. A falha de um pedido não afetará os outros.
  • Configuração: Permite configurar de forma flexível o comportamento dos processos, por exemplo, o número máximo de pedidos por processo, tempo de vida do processo, gestão de memória.
  • Integração com servidores web: Integra facilmente com servidores web populares através do protocolo FastCGI.

Exemplo de configuração do grupo de processos em php-fpm.d/www.conf:

; Nome do grupo
[www]

; Utilizador e grupo sob os quais os processos serão executados
user = www-data
group = www-data

; Escuta em um socket TCP:
; listen = 127.0.0.1:9000
; ...ou em um socket Unix:
listen = /run/php/php7.4-fpm.sock

; Método de gestão de processos:
; static - número fixo de processos (`pm.max_children`)
; dynamic - número dinâmico de processos (`pm.start_servers`, `pm.min_servers`, `pm.max_servers`)
; ondemand - criados ao receber uma solicitação (`pm.process_idle_timeout`, `pm.max_children`)
pm = dynamic

; Número inicial de processos filhos ao iniciar em modo dynamic
pm.start_servers = 5

; Número mínimo de processos filhos que estarão sempre em execução em modo dynamic
pm.min_servers = 2

; Número máximo de processos filhos em modo dynamic e static/ondemand
pm.max_children = 15

Sem FPM, o servidor web teria que lançar o interpretador PHP para cada pedido, o que seria muito ineficiente devido aos custos adicionais. O FPM resolve este problema mantendo processos prontos a trabalhar.