Timeouts no PHP-FPM: Como Calcular e Evitar Erros 504

Configurar corretamente o timeout php-fpm é um daqueles detalhes técnicos que muitos ignoram até que o servidor comece a apresentar lentidão extrema ou os usuários reclamem de erros 504. O ajuste fino do timeout php-fpm é um equilíbrio delicado entre dar tempo ao script e proteger a saúde do seu servidor.

Timeouts mal configurados no PHP-FPM podem causar filas de requisições, travamentos e alto consumo de recursos. Ajustar esses parâmetros faz parte de uma estratégia maior apresentada no guia completo de alta performance para servidor Linux

O Impacto Real de um Timeout PHP-FPM Mal Ajustado

Quando os limites estão mal definidos, o servidor sofre de duas formas. Timeouts curtos demais interrompem processos legítimos, enquanto um timeout php-fpm excessivamente longo pode causar o “empilhamento” de processos. Se uma API externa trava, seus workers ficam pendurados, esgotando o max_children e derrubando o site por completo.


Como Calcular o Limite do Timeout PHP-FPM

O cálculo ideal não é aleatório; ele segue uma hierarquia de camadas. Para que o timeout php-fpm funcione como uma rede de segurança, ele deve ser coordenado com o servidor web (Nginx/Apache).

A Regra de Hierarquia

Para um funcionamento saudável, aplique a seguinte lógica matemática:

T_{nginx} > T_{fpm} > T_{php}

Tabela de Configuração Recomendada

Se o seu objetivo é um limite real de 30 segundos para o usuário, configure assim:

ComponenteDiretivaValor Sugerido
Nginxfastcgi_read_timeout60s
PHP-FPMrequest_terminate_timeout35s
PHP Coremax_execution_time30s

Neste cenário, o timeout php-fpm (request_terminate_timeout) atua como o “matador de processos” caso o script ignore o limite interno do PHP, mas antes que o Nginx desista da conexão.

Quando um processo PHP fica preso por muito tempo, ele bloqueia workers disponíveis e reduz a capacidade de resposta do servidor. Por isso, o controle de timeouts faz parte da arquitetura de alta performance em servidores Linux


Estratégias para Otimizar o seu Servidor

  1. Monitore o Slow Log: Ative o log de lentidão para identificar qual script está atingindo o limite do timeout php-fpm. Use request_slowlog_timeout = 5s.
  2. Isole Processos Pesados: Nunca aumente o timeout php-fpm global para resolver um problema de um único relatório pesado. Crie um pool separado para tarefas de longa duração.
  3. Ajuste o I/O: Lembre-se que o max_execution_time do PHP não conta tempo de espera de banco de dados, mas o timeout php-fpm sim. Por isso, ele é sua ferramenta mais confiável de gestão de recursos.

Conclusão sobre o Limite Ideal

Ajustar o timeout php-fpm é prevenir que uma falha externa se torne um desastre interno. Ao definir limites claros e hierárquicos, você garante que o servidor permaneça responsivo mesmo sob estresse.

Configurar corretamente timeouts e limites do PHP-FPM é essencial para evitar gargalos em aplicações PHP. Para entender todas as camadas envolvidas na performance do servidor, consulte o guia definitivo de alta performance em servidores Linux

FAQ

Qual a diferença entre max_execution_time e request_terminate_timeout?

O max_execution_time é uma diretiva do PHP que limita o tempo de CPU gasto pelo script. Já o request_terminate_timeout é uma configuração do PHP-FPM que força o encerramento do processo após o tempo X, independentemente se o PHP ainda está processando I/O ou espera de banco de dados.

Por que recebo erro 504 mesmo aumentando o timeout no PHP?

Geralmente porque o Nginx (ou Apache) tem seu próprio timeout (fastcgi_read_timeout). Se o PHP demorar 60s mas o Nginx estiver configurado para esperar apenas 30s, a conexão será cortada antes do PHP terminar.

Como o timeout mal configurado afeta a memória do servidor?

Timeouts muito longos permitem que processos “zumbis” ou travados ocupem slots de children do PHP-FPM. Isso consome memória RAM continuamente e impede que novas requisições legítimas sejam processadas, causando negação de serviço.

Qual o valor ideal para o timeout de um site WordPress ou Laravel?

Para aplicações web comuns, o ideal é manter entre 30 a 60 segundos. Processos que exigem mais tempo (como exportação de relatórios) devem ser movidos para filas (Queues/Jobs) ou processados via CLI para não travar o pool do servidor web.

Precisa de ajuda com outro problema? 
[Nossa equipe está disponível 24 horas por dia, 7 dias por semana]

Veja Mais:

Nginx FastCGI Cache vs Redis: Qual a Melhor Estratégia de Cache?
Como Ativar HTTP/3 e QUIC no seu Servidor
PHP-FPM: O que é, Como Funciona e Por Que Melhora a Performance do Servidor
Como Otimizar my.cnf e Reduzir o Uso de CPU no MariaDB/MySQL
Performance Servidor Linux 2026: O Guia Definitivo de Otimização