Gerenciador de processos PHP FastCGI – PHP-FPM
O PHP é uma das linguagens de programação mais usadas para o desenvolvimento da Web. Quando se trata de lidar com grandes volumes de tráfego de forma eficiente, o desempenho do PHP pode afetar significativamente a velocidade geral e a capacidade de resposta dos sites. É nesse ponto que o PHP FastCGI Process Manager (PHP-FPM) entra em ação. O PHP-FPM é um manipulador de PHP alternativo amplamente adotado que fornece um método de alto desempenho para a execução de scripts PHP.
Neste artigo, vamos nos aprofundar no que é o PHP-FPM, por que ele é essencial para otimizar o desempenho do servidor da Web e como configurá-lo para seus aplicativos baseados em PHP.
O que é o PHP-FPM?
O PHP-FPM, ou PHP FastCGI Process Manager, é uma implementação do FastCGI para scripts PHP. O FastCGI é um protocolo usado para melhorar o desempenho dos servidores da Web, tratando as solicitações com mais eficiência do que a CGI (Common Gateway Interface) padrão. Enquanto o CGI cria um novo processo para cada solicitação (o que leva a um alto consumo de recursos), o FastCGI mantém um pool de processos de trabalho prontos para lidar com várias solicitações, reduzindo assim a sobrecarga.
O PHP-FPM adiciona uma camada de gerenciamento de processos sobre o FastCGI, permitindo recursos como pooling de processos, geração de trabalhadores sob demanda, desligamento gracioso e a capacidade de lidar com ambientes de alto tráfego com facilidade. Atualmente, ele é o manipulador de PHP padrão de fato para muitos servidores da Web modernos, incluindo NGINX e Apache.
Por que usar o PHP-FPM?
- Desempenho aprimorado: O PHP-FPM pode lidar com mais solicitações simultâneas com menos recursos, reduzindo a carga do servidor e acelerando os tempos de resposta. Isso é especialmente benéfico para sites ou aplicativos de alto tráfego que sofrem picos repentinos de tráfego.
- Gerenciamento de processos: O PHP-FPM permite o gerenciamento de processos com ajuste fino, dando-lhe controle sobre como o PHP lida com as solicitações. Ele usa um pool de trabalhadores que pode ser ajustado para se adequar à carga de trabalho esperada, garantindo o uso eficiente dos recursos do servidor.
- Melhor utilização de recursos: Como o PHP-FPM agrupa processos, ele pode atender a várias solicitações usando os mesmos trabalhadores, minimizando a necessidade de criar e encerrar processos continuamente. Isso melhora o uso da memória e a eficiência da CPU.
- Degradação graciosa: Quando configurado corretamente, o PHP-FPM pode se degradar graciosamente, reduzindo o número de processos ativos se o servidor ficar sobrecarregado, evitando uma falha completa.
- Recursos avançados: O PHP-FPM inclui recursos avançados, como registro lento para depuração, geração adaptável de processos e relatórios de status, que fornecem informações sobre o desempenho e a integridade dos seus aplicativos PHP.
Principais recursos do PHP-FPM
- Pools de processos: O PHP-FPM permite que você defina vários pools de processos de trabalho PHP. Cada pool pode ser configurado com definições diferentes, permitindo que você execute diferentes aplicativos PHP com requisitos de tráfego variados no mesmo servidor.
- Geração de processos adaptável: O PHP-FPM pode dimensionar automaticamente o número de processos de trabalho com base nos níveis de tráfego. Ele começa com um número mínimo de workers e pode aumentar o tamanho do pool quando necessário, sem desperdiçar recursos durante períodos de baixo tráfego.
- Registro lento: O recurso de registro lento do PHP-FPM registra as solicitações que excedem um tempo de execução predefinido. Isso ajuda os desenvolvedores a identificar e resolver gargalos de desempenho em seu código PHP.
- Página de status: O PHP-FPM oferece uma página de status integrada que fornece informações em tempo real sobre o status do pool, os trabalhadores ativos, os trabalhadores ociosos e outras métricas que podem ser usadas para monitorar o desempenho.
- Encerramento normal: O PHP-FPM pode encerrar processos de forma graciosa, permitindo que as solicitações em andamento sejam concluídas antes do encerramento. Isso evita o encerramento abrupto de scripts em execução, garantindo uma melhor experiência do usuário.
Como o PHP-FPM funciona
O PHP-FPM opera como um servidor FastCGI autônomo que é integrado a um servidor da Web, como o NGINX ou o Apache, para servir scripts PHP. Quando uma solicitação é recebida, o servidor Web encaminha a solicitação PHP para o serviço PHP-FPM, que gerencia um pool de processos de trabalho para executar o código PHP e enviar o resultado de volta ao servidor Web para entrega ao cliente.
Aqui está um fluxo simplificado de como o PHP-FPM lida com uma solicitação:
- Solicitação do cliente: Um usuário solicita uma página da Web que contém código PHP.
- Servidor da Web recebe a solicitação: O servidor da Web (NGINX ou Apache) recebe a solicitação e a encaminha para o serviço PHP-FPM usando o protocolo FastCGI.
- O trabalhador do PHP-FPM processa a solicitação: Um dos processos de trabalho no pool do PHP-FPM lida com a solicitação, executa o script PHP e retorna a saída.
- Resposta enviada de volta: O servidor da Web recebe a saída e a envia de volta ao cliente como o HTML renderizado final.
Instalação e configuração do PHP-FPM
Etapa 1: Instalação do PHP-FPM
Na maioria das distribuições Linux, o PHP-FPM pode ser instalado por meio de gerenciadores de pacotes. Aqui estão os comandos para sistemas comuns:
# Para Debian/Ubuntu
sudo apt update
sudo apt install php-fpm
# Para CentOS/RHEL
sudo yum install php-fpm
Depois de instalado, você pode iniciar o serviço PHP-FPM:
sudo systemctl start php-fpm
Etapa 2: Configuração de pools do PHP-FPM
O arquivo de configuração principal do PHP-FPM geralmente está localizado em /etc/php/7.x/fpm/pool.d/ ou /etc/php-fpm.d/ , dependendo da sua distribuição e da versão do PHP. Cada pool é definido em seu próprio arquivo, geralmente com o nome do site ou aplicativo que atende. Aqui está um exemplo de configuração de um pool:
[www]
usuário = www-data
grupo = www-data
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dinâmico
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500
- pm = dinâmico: O gerenciador de processos pode ajustar dinamicamente o número de processos de trabalho com base na demanda.
- pm.max_children: O número máximo de processos de trabalho que podem ser gerados para atender às solicitações.
- pm.start_servers: O número de processos de trabalho que são iniciados quando o PHP-FPM é iniciado.
- pm.min_spare_servers e pm.max_spare_servers: Define o número mínimo e máximo de workers ociosos, permitindo que o PHP-FPM dimensione os recursos com base na carga.
- pm.max_requests: O número máximo de solicitações que um worker pode manipular antes de ser encerrado e substituído. Isso ajuda a evitar vazamentos de memória em scripts de longa execução.
Etapa 3: configuração do servidor Web para usar o PHP-FPM
Para o NGINX:
Em seu arquivo de configuração do NGINX (por exemplo, /etc/nginx/sites-available/example.com), configure o PHP-FPM como o manipulador de PHP:
server {
listen 80;
nome_do_servidor exemplo.com;
root /var/www/html;
localização / {
try_files $uri $uri/ =404;
}
local ~ \.php$ {
incluir snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
}
Para ativar o PHP-FPM no Apache, certifique-se de que o módulo mod_proxy_fcgi esteja ativado:
sudo a2enmod proxy_fcgi setenvif
Em seguida, atualize a configuração do host virtual do Apache:
ServerName example.com
DocumentRoot /var/www/htmlSetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
Etapa 4: testar a configuração
Depois de configurar o PHP-FPM e o servidor Web, reinicie os serviços para aplicar as alterações:
# Para o NGINX
sudo systemctl restart nginx
# Para o Apache
sudo systemctl restart apache2
Para verificar se o PHP-FPM está funcionando, crie um arquivo phpinfo.php em seu diretório raiz da Web:
?php
phpinfo();
?>
Visite o arquivo em seu navegador (por exemplo, http://example.com/phpinfo.php) para ver se o PHP-FPM está listado como o manipulador.
Conclusão
O PHP-FPM é uma ferramenta essencial para otimizar o desempenho do PHP, especialmente para sites de alto tráfego. Ele oferece benefícios significativos em relação aos manipuladores tradicionais do PHP, gerenciando processos de forma eficiente, melhorando a utilização dos recursos do servidor e oferecendo recursos avançados, como escalonamento adaptativo de processos e registro lento. Ao configurar o PHP-FPM para atender às suas necessidades específicas, você pode garantir que seus aplicativos PHP sejam executados de forma suave e eficiente, mesmo sob cargas pesadas.
Seguindo as etapas deste guia, você deve estar no caminho certo para configurar e otimizar o PHP-FPM para seus projetos baseados em PHP.