PHP-FPM: Como Calcular pm.max_children Corretamente

O que é pm.max_children?

É o número máximo de processos PHP simultâneos que o pool pode executar.

Cada processo = 1 requisição PHP ativa
Cada processo consome RAM

👉 Se passar do limite → 502 / timeout
👉 Se exagerar → swap / OOM / servidor lento


1️⃣ Regra principal (fórmula real)

pm.max_children = RAM disponível para PHP
                  ÷
                  consumo médio de 1 processo PHP

Simples, mas precisa medir corretamente.


2️⃣ Descubra quanta RAM está disponível para o PHP

Passo 1 – RAM total

free -m

Exemplo:

Total: 12288 MB

Passo 2 – Reserve RAM para o sistema

Sempre reserve:

  • SO + serviços: 2–3 GB
  • MySQL/MariaDB: 30–40% da RAM
  • Cache (Redis, OPcache): 500 MB – 1 GB

Exemplo real (12 GB RAM):

Total:        12288 MB
Sistema:       2048 MB
MariaDB:       4096 MB
Cache/Outros:   512 MB
-------------------------
Disponível PHP: ~5632 MB

3️⃣ Meça o consumo real de um processo PHP-FPM

Método correto (produção)

ps --no-headers -o "rss,cmd" -C php-fpm | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'

Exemplo de saída:

42 MB

📌 Em WordPress:

  • PHP simples: 30–40 MB
  • WooCommerce: 50–80 MB
  • Sites pesados: 100+ MB

4️⃣ Calcule o pm.max_children

Usando o exemplo:

5632 MB ÷ 42 MB ≈ 134 processos

Valor seguro:

pm.max_children = 120

📌 Sempre deixe 10–15% de margem.


5️⃣ Escolha o pm correto (isso muda tudo)

🔹 ondemand (RECOMENDADO)

pm = ondemand
pm.max_children = 120
pm.process_idle_timeout = 10s

✔ Menos RAM
✔ Ideal para WordPress
✔ Evita processos ociosos


🔹 dynamic

pm = dynamic
pm.max_children = 120
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

⚠️ Usa mais RAM (processos sempre ativos)


6️⃣ Ambientes com CloudLinux (LVE)

👉 O cálculo deve ser por conta, não global.

Exemplo por usuário:

  • RAM LVE: 1 GB
  • Processo PHP: 40 MB
1024 ÷ 40 ≈ 25
pm.max_children = 20

📌 Isso evita que um site derrube o servidor.


7️⃣ Sinais de pm.max_children mal configurado

Muito baixo

  • Erros 502
  • server reached pm.max_children
  • Lentidão sob carga

Muito alto

  • Swap ativo
  • OOM Killer
  • Servidor lento mesmo sem tráfego

8️⃣ Monitoramento em tempo real

watch -n1 "ps -ylC php-fpm --sort:rss | head"

Ver erros:

journalctl -u php-fpm

9️⃣ Exemplo final (produção WordPress)

Servidor:

  • 12 GB RAM
  • MariaDB 11.x
  • CloudLinux
  • Nginx + Apache
pm = ondemand
pm.max_children = 120
pm.process_idle_timeout = 10s
pm.max_requests = 500

✅ Checklist rápido

✔ RAM medida corretamente
✔ Consumo real do PHP calculado
✔ Margem de segurança aplicada
pm=ondemand usado
✔ Monitoramento ativo

Clique aqui e consulte nossos planos de Gerenciamento de Servidor