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

FAQ:

O que é o pm.max_children e por que ele é importante?

É a diretiva que define o número máximo de processos simultâneos que o PHP-FPM pode criar. Se o limite for muito baixo, os usuários enfrentarão lentidão ou erros 502/504 em picos de tráfego. Se for muito alto, o servidor pode ficar sem memória RAM e travar completamente.

Qual é a fórmula recomendada para o cálculo?

A fórmula básica utilizada é:
pm.max_children = (Memória RAM Disponível para o PHP) / (Consumo Médio de um Processo PHP)

Como descubro o consumo médio de memória de um processo PHP?

Você pode usar o seguinte comando no terminal (SSH) para listar o consumo real dos processos ativos:
ps -ylC php-fpm --sort:rss
A coluna RSS mostrará o valor em KBs. Geralmente, para sites WordPress, esse valor varia entre 40MB e 80MB por processo.

Como calcular a “Memória Disponível” corretamente?

Não use toda a RAM do servidor. Você deve subtrair a memória usada pelo Sistema Operacional, pelo Banco de Dados (MySQL/MariaDB) e pelo Servidor Web (Nginx/Apache).
Exemplo: Em um servidor de 8GB, se o MySQL usa 4GB e o sistema 1GB, restam 3GB para o PHP.

Como saber se o meu pm.max_children está baixo demais?

Você deve monitorar o log de erros do PHP-FPM (geralmente em /var/log/php-fpm.log ou similar). Se encontrar a mensagem:
“server reached pm.max_children, consider raising it”
Isso indica que o servidor atingiu o limite e está enfileirando requisições, sendo necessário aumentar o valor ou otimizar o consumo de memória do site.

Qual a diferença entre os modos static, dynamic e ondemand?

static: Mantém um número fixo de processos (usa max_children o tempo todo). Ideal para servidores dedicados de alto tráfego.
dynamic: Cria processos conforme a demanda, respeitando um mínimo e máximo. É o mais equilibrado para a maioria das VPS.
ondemand: Só cria processos quando chega uma requisição. Excelente para economizar memória em servidores com muitos sites de baixo tráfego.

Além do max_children, qual outro parâmetro ajuda a evitar vazamento de memória?

recomenda ajustar o pm.max_requests (ex: 500 ou 1000). Isso força o processo PHP a reiniciar após processar um certo número de requisições, limpando qualquer “lixo” acumulado na memória (memory leaks).

Veja Mais:

Guia Definitivo de Otimização de Servidor Web Linux (2026)

Nginx vs. LiteSpeed: Qual Performa Melhor em Produção?

MariaDB consumindo muita CPU? Como otimizar o my.cnf

Como Ativar HTTP/3 e QUIC no seu Servidor