PHP-FPM Tuning: Parâmetros que Realmente Importam para Alta Performance

PHP-FPM

PHP-FPM tuning. Se o PHP-FPM estiver mal ajustado, não existe Nginx, Apache, Redis ou NVMe que salve. O oposto também é verdade: um PHP-FPM bem dimensionado reduz CPU, RAM, latência e erros 502/504.


1️⃣ pm – o modelo de gerenciamento de processos (CRÍTICO)

🔹 pm = dynamic (padrão e mais comum)

Bom para a maioria dos servidores.

pm = dynamic

✔ Cria processos conforme a demanda
✖ Pode oscilar em picos se mal dimensionado


🔹 pm = ondemand

Ideal para baixo ou médio tráfego, APIs ou múltiplos pools.

pm = ondemand

✔ Menor uso de RAM
✖ Primeiro request após idle é mais lento


🔹 pm = static

Para alto tráfego previsível (sites grandes, ecommerce, SaaS).

pm = static

✔ Latência mínima
✖ RAM sempre alocada (sem perdão)

👉 Produção com tráfego alto e estável? static
👉 Ambiente misto ou WordPress comum? dynamic


2️⃣ pm.max_children – o parâmetro mais importante de TODOS

Esse aqui define quantas requisições PHP simultâneas seu servidor aguenta.

Fórmula correta (sem achismo):

Visite nosso post clicando aqui PHP-FPM: Como Calcular pm.max_children Corretamente

Como medir o consumo real:

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

3️⃣ pm.start_servers, pm.min_spare_servers, pm.max_spare_servers

Só importam se você usa pm = dynamic.

Valores realistas:

pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 30

📌 Regra prática:

  • start_servers ≈ tráfego médio
  • max_spare_servers ≈ 30% de max_children

❌ Valores muito baixos = latência em pico
❌ Valores altos demais = RAM desperdiçada


4️⃣ request_terminate_timeout – mata PHP travado

Esse parâmetro evita processos PHP zumbis.

request_terminate_timeout = 60s

✔ Protege contra:

  • Plugins bugados
  • Queries travadas
  • APIs lentas

👉 WordPress padrão: 30–60s
👉 WooCommerce pesado: 90s


5️⃣ pm.max_requests – reciclagem inteligente

Evita vazamento de memória em scripts mal escritos.

pm.max_requests = 500

✔ Reinicia o worker após X requisições
✔ Estabiliza uso de RAM ao longo do tempo

Valores comuns:

  • 300 a 1000 (WordPress costuma ficar bem em 500)

6️⃣ listen.backlog – fila antes do desastre

listen.backlog = 8192

Se o backlog for pequeno:

  • O kernel recusa conexões
  • Você vê picos de 502 mesmo com CPU livre

7️⃣ rlimit_files – subestimado e perigoso

rlimit_files = 65535

Sem isso:

  • “Too many open files”
  • PHP cai em tráfego alto
  • Logs não explicam nada

8️⃣ OPcache (não é PHP-FPM, mas manda no desempenho)

Sem OPcache bem ajustado, todo tuning acima perde valor.

opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=100000
opcache.validate_timestamps=0
opcache.revalidate_freq=0

🚀 Impacto real:

  • Menos CPU
  • Resposta mais rápida
  • Menos processos PHP necessários

9️⃣ O que NÃO importa (ou quase)

pm.process_idle_timeout (quase irrelevante)
❌ Ajustes extremos de nice
❌ Criar dezenas de pools sem necessidade
❌ “Tunings mágicos” copiados de blog genérico


1️⃣0️⃣ Exemplo de pool PHP-FPM realista (WordPress produção)

[www]
user = php-fpm
group = php-fpm

listen = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
listen.backlog = 8192

pm = dynamic
pm.max_children = 100
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.max_requests = 500

request_terminate_timeout = 60s
rlimit_files = 65535

🔥 Checklist final de tuning correto

✔ Mediu consumo real de PHP
✔ Calculou pm.max_children corretamente
✔ Limitou tempo de execução
✔ OPcache bem configurado
✔ Evitou overcommit de RAM

FAQ – PHP-FPM Tuning

O que é PHP-FPM tuning?

PHP-FPM tuning é o processo de ajustar os parâmetros do PHP-FPM para melhorar desempenho, reduzir consumo de memória e evitar erros como 502 Bad Gateway em servidores PHP e WordPress.

Qual é o parâmetro mais importante do PHP-FPM?

O parâmetro mais importante é o pm.max_children, pois ele define quantas requisições PHP simultâneas o servidor consegue processar sem esgotar a memória RAM.

Como calcular corretamente o pm.max_children?

Você deve dividir a RAM disponível para PHP pelo consumo médio de um processo PHP-FPM. Esse valor deve ser medido em produção, nunca estimado.

Qual modo de gerenciamento (pm) é melhor: dynamic, static ou ondemand?

Depende do cenário:
dynamic: melhor para a maioria dos sites WordPress
static: ideal para alto tráfego previsível
ondemand: indicado para baixo tráfego ou múltiplos pools
Não existe um modo “melhor para tudo”.

PHP-FPM mal configurado pode causar erro 502?

Sim. Valores incorretos de pm.max_children, backlog baixo ou processos PHP travados são as principais causas de erro 502 Bad Gateway em Nginx ou Apache.

Vale a pena aumentar muito o pm.max_children?

Não. Aumentar demais pode causar swap, OOM Killer, load alto com CPU baixa e instabilidade geral. Mais processos não significa mais performance.

O OPcache influencia no PHP-FPM tuning?

Diretamente. Um OPcache bem configurado reduz o uso de CPU e memória, permitindo menos processos PHP-FPM para o mesmo volume de tráfego.

Quantos processos PHP-FPM um servidor aguenta?

Depende exclusivamente de:
Quantidade de RAM
Consumo médio por processo PHP
Complexidade da aplicação (WordPress, WooCommerce, plugins)
Não existe número padrão válido para todos os servidores.

PHP-FPM tuning melhora o SEO do site?

Indiretamente, sim. Um PHP-FPM bem ajustado reduz tempo de resposta, melhora Core Web Vitals, diminui erros 5xx e aumenta a estabilidade — fatores que impactam SEO e conversão.

É recomendável criar pools separados no PHP-FPM?

Sim, em ambientes mais avançados. Separar pools para admin, cron, APIs ou WooCommerce ajuda a isolar problemas e melhorar previsibilidade de performance.