Quem trabalha com desenvolvimento web ou administração de servidores certamente já passou por este cenário clássico: o site ou aplicação começa a apresentar lentidão, os usuários reclamam, mas, ao olhar o consumo de CPU e memória, tudo parece sob controle. É nesse momento que a frustração bate. Afinal, onde está o gargalo?
Quando utilizamos a consagrada dobradinha Nginx e PHP-FPM, a resposta para esse mistério quase sempre está na latência de processamento. Sem um monitoramento adequado, identificar se o atraso ocorre na rede, na entrega do Nginx ou na execução do script PHP vira um jogo de adivinhação.
Neste guia prático, vamos direto ao ponto. Você vai aprender a configurar o monitoramento de latência nessa stack, entender o que os dados estão dizendo e aplicar melhorias reais na sua infraestrutura.
Por que monitorar a latência no Nginx e PHP-FPM?
Tempo é dinheiro, especialmente na web. Um atraso de poucos milissegundos pode derrubar suas taxas de conversão e prejudicar a experiência do usuário. Monitorar a latência permite que você:
- Isole o problema: Descubra instantaneamente se a lentidão vem de uma consulta demorada no banco de dados (PHP) ou de um arquivo estático pesado (Nginx).
- Evite quedas: Identifique gargalos antes que eles saturem os processos do PHP-FPM e derrubem o servidor.
- Tome decisões baseadas em dados: Pare de adivinhar configurações de
pm.max_childrene ajuste sua infraestrutura com precisão.
Passo 1: Configurando o Nginx para registrar tempos de resposta
O Nginx é extremamente poderoso, mas, por padrão, seu log de acessos não mostra o tempo que cada requisição levou para ser processada. Para mudar isso, precisamos customizar o formato dos logs (log_format).
Abra o arquivo de configuração principal do Nginx (geralmente em /etc/nginx/nginx.conf) e adicione ou modifique a diretiva dentro do bloco http:
log_format detalhado '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'tempo_total=$request_time tempo_php=$upstream_response_time';
Aqui está o “pulo do gato” dessa configuração:
$request_time: O tempo total que o Nginx levou para processar a requisição, desde o primeiro byte enviado pelo cliente até a resposta final.$upstream_response_time: O tempo que o Nginx ficou esperando a resposta do PHP-FPM (ou outro backend). Se este valor estiver alto, o problema está no seu código PHP ou no banco de dados.
Depois de definir o formato, aplique-o ao seu bloco de servidor (virtual host):
access_log /var/log/nginx/seu-site-access.log detalhado;
Não se esqueça de testar e reiniciar o Nginx:
nginx -t
systemctl restart nginx
Passo 2: Ativando o Slow Log no PHP-FPM
Agora que o Nginx nos diz quando o PHP está lento, precisamos descobrir o que está lento dentro do PHP. É aqui que entra o Slow Log do PHP-FPM.
Essa ferramenta registra a pilha de execução (stack trace) de qualquer script que demore mais do que o tempo limite definido. Para ativá-la, edite o arquivo de configuração do seu pool (geralmente em /etc/php/8.x/fpm/pool.d/www.conf):
; Caminho para o arquivo de log de lentidão
slowlog = /var/log/php-fpm/www-slow.log
; Tempo limite para considerar uma requisição lenta (ex: 2 segundos)
request_slowlog_timeout = 2s
Com essa configuração, se uma página demorar mais de 2 segundos para rodar, o PHP-FPM salvará no arquivo www-slow.log a linha exata do código e a função que causaram a demora. Isso é ouro para os desenvolvedores!
Reinicie o serviço do PHP-FPM para aplicar as alterações:
systemctl restart php8.x-fpm
Passo 3: Habilitando a página de status do PHP-FPM
Para um monitoramento em tempo real, a página de status do PHP-FPM é indispensável. Ela mostra quantos processos estão ativos, ociosos e se você atingiu o limite máximo de conexões.
No mesmo arquivo de configuração do pool (www.conf), descomente ou adicione a linha:
pm.status_path = /status
Agora, configure o Nginx para permitir o acesso a essa página apenas de IPs autorizados (para proteger seus dados de desempenho):
location ~ ^/(status|ping)$ {
allow 127.0.0.1;
allow seu_ip_de_gerenciamento;
deny all;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.x-fpm.sock;
}
Aplicações Práticas: O que fazer com esses dados?
Configurar os logs é apenas o primeiro passo. O verdadeiro valor está em como você utiliza essas informações no dia a dia. Veja alguns cenários práticos:
1. Identificação de gargalos em APIs externas
Se o seu tempo_php (upstream) está alto, mas o consumo de CPU está baixo, verifique o Slow Log. Muitas vezes, você descobrirá que sua aplicação está travada esperando a resposta de uma API de pagamento ou de entrega de terceiros que está instável.
2. Ajuste fino de banco de dados
Consultas SQL mal otimizadas ou falta de índices são as maiores vilãs da latência. Ao analisar o log de lentidão do PHP-FPM, você verá exatamente qual classe ou método de banco de dados está segurando a requisição.
3. Dimensionamento correto de servidores
Se o status do PHP-FPM mostrar constantemente que o número de processos ativos (active processes) está colado no limite máximo (max children reached), sua latência vai disparar porque as novas requisições ficarão em uma fila de espera. Com esses dados em mãos, você sabe exatamente quando é hora de fazer um upgrade de hardware ou otimizar o uso de memória.
Conclusão
Monitorar a latência no Nginx e PHP-FPM não precisa ser uma tarefa complexa ou restrita a grandes corporações. Com as configurações nativas que aprendemos hoje, você ganha visibilidade total sobre o comportamento da sua aplicação, permitindo agir cirurgicamente nos problemas em vez de tomar decisões baseadas em palpites.
Implemente essas etapas no seu ambiente de homologação, analise os resultados e prepare-se para ver a performance da sua aplicação decolar!