Abaixo, explicamos a anatomia desse erro e como corrigi-lo ajustando seu Web Server (Nginx/Apache) e PHP-FPM.
A Analogia do Carro de Palhaço
Para entender por que o servidor trava sem cair, vamos usar a “Analogia Primeiro”.
Imagine que sua memória RAM é um fusca e os processos do PHP (que geram as páginas do site) são palhaços.
- O Erro: Você configura o servidor para permitir 50 palhaços (
pm.max_children = 50). - A Realidade: O fusca só aguenta 10.
- O Resultado: Quando o 11º palhaço tenta entrar (pico de tráfego), o carro não explode. Ele simplesmente para de andar porque está pesado demais arrastando a lataria no chão (Swap). O motor (CPU) continua ligado, mas o carro não sai do lugar.
O Vilão Técnico: Swap Thrashing
O “erro invisível” acontece quando você permite que o servidor abra mais processos simultâneos do que a RAM física suporta.
- O tráfego aumenta e o PHP-FPM cria novos processos “filhos” (children) para atender as requisições.
- A RAM física (ex: 4GB) enche.
- O kernel do Linux, para não travar, começa a usar o Swap (memória virtual no disco SSD).
- O Colapso: O disco é milhares de vezes mais lento que a RAM. A CPU começa a gastar 99% do tempo esperando o disco ler/escrever dados (I/O Wait). O Load Average dispara para 50, 100… O servidor não caiu, mas está tão lento que nenhuma requisição HTTP é completada antes do timeout.
Como Diagnosticar e Corrigir
Você não precisa de mais hardware; você precisa de configuração certa.
1. Descubra o Peso do seu Processo
Acesse sua VPS via terminal e rode o comando abaixo enquanto navega no site para ver quanto de RAM cada processo PHP consome em média:
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"Mb") }'
Digamos que a média seja 60MB por processo.
2. A Fórmula de Sobrevivência
Se você tem uma VPS de 4GB de RAM, reserve 1GB para o sistema operacional e banco de dados. Sobram 3GB (3000MB) para o PHP.
A conta é: 3000MB / 60MB = 50 processos.
3. Ajuste a Configuração (O Fix)
Vá no arquivo de configuração do seu pool PHP (geralmente em /etc/php/8.x/fpm/pool.d/www.conf) e altere:
pm = dynamic(ou ondemand)pm.max_children = 50(O teto seguro que calculamos)pm.start_servers = 5
Ao limitar o max_children corretamente, quando o 51º usuário chegar, ele ficará na fila por alguns milissegundos em vez de derrubar o servidor inteiro por falta de memória.
Conclusão: Limites Salvam Vidas
Configurar o limite máximo de conexões parece contra-intuitivo (“Eu quero atender todos!”), mas é o que garante que seu servidor permaneça de pé. É melhor um site ligeiramente mais lento no pico do que um site fora do ar.
Seu Checklist de Estabilidade:
- Sei quanto de RAM meu processo PHP consome?
- Meu
max_childrencabe na minha RAM total? - Tenho monitoramento de uso de Swap?
Quer uma VPS onde a configuração é otimizada por especialistas em performance? Traga seu projeto para a StayCloud e pare de sofrer com travamentos!



