Un sitio de comercio electrónico falla todos los lunes por la mañana. El equipo configura el plan VPS. El lunes siguiente, mismo síntoma: páginas blancas, Nginx devuelve 502 Bad Gateway. El verdadero problema no era la CPU: era PHP-FPM el que había agotado sus trabajadores y su RAM al mismo tiempo. Configuración de saldos de FPM capacidad de respuesta y techo de memoria. Mal calibrado, el servidor se convierte en una apuesta: o los visitantes esperan o el kernel mata los procesos.
PHP-FPM gestiona un conjunto de procesos PHP. Cada solicitud dinámica consume un trabajador. Si los 20 trabajadores están ocupados, la solicitud número 21 espera en una cola: el TTFB explota. Si ejecuta 200 con 4 GB de RAM, el asesino de OOM se activa.
Lea el estado actual antes de tocar cualquier cosa
En primer lugar pm.max_children = 50 copiado de un foro:
# Procesos FPM y RAM (grupo de ejemplo www)
ps --no-headers -o rss,cmd -C php-fpm8.2 | awk '{suma+=$1} FIN {imprimir suma/1024 "MB total"}'
Localice también:
listen.queueenphp-fpm status— solicitudes pendientes.- 502/504 correlacionado con picos en los registros de Nginx.
slowlog: scripts que retienen a los trabajadores durante mucho tiempo.
| Señal | Interpretación |
|---|---|
| Cola > 0 regular | No hay suficientes trabajadores o scripts demasiado lentos |
| Intercambio de RAM utilizado | Demasiados trabajadores o pérdida de memoria PHP |
| Trabajadores inactivos = máximo permanentemente | Piscina de tamaño insuficiente |
| Trabajadores inactivos = 0, RAM OK | Scripts lentos, no grupos demasiado pequeños |
Calcular pm.max_children sin fórmula mágica
La fórmula básica:
max_children ≈ (RAM asignada al grupo PHP) / (RAM promedio por trabajador bajo carga)
Mida la RAM por trabajador con tráfico realista (no una página de inicio vacía). WordPress pesado suele ejecutar entre 60 y 120 MB por proceso. Laravel o Magento van más arriba.
En un VPS de 8 GB donde PHP puede usar 4 GB:
- Trabajador medio: 100 MB → máximo teórico 40.
- Mantenga un margen de 20–30 % para OS, MySQL, Redis → apunte a 28–32, no 40.
Los modos pm:
| Moda | Comportamiento | Casos de uso |
|---|---|---|
| dinámico | Generar entre mínimo y máximo dependiendo de la carga | Sitios variables, buen compromiso |
| estático | Maximizar siempre los trabajadores activos | Carga estable, latencia mínima |
| bajo demanda | Creado bajo demanda, tiempo de espera de inactividad | RAM muy limitada, acepta arranque en frío |
slowlog, request_terminate_timeout y errores comunes
request_slowlog_timeout (ej. 5 s) + slowlog = lista de scripts que monopolizan a los trabajadores. Corrija el código antes de agregar procesos.
request_terminate_timeout corta un script infinito: útil, pero puede truncar importaciones legítimas si no se configura correctamente.
Errores clásicos:
- Copiar un grupo de producción en un grupo compartido: límites diferentes, cuenta suspendida.
- Ignorar MySQL: 50 trabajadores × consultas lentas = 50 conexiones de base de datos saturadas.
- OPcache deshabilitado o de tamaño incorrecto: cada trabajador recarga el código de bytes, la RAM está inflada (consulte OPcache).
- high max_children + sin caché de página: WordPress recalcula todo en cada visita.
La cima: más trabajadores esconde una aplicación lenta
Este es el punto que eluden las ofertas “ilimitadas”: ilimitado en el lado del visitante no significa ilimitado en el lado del proceso PHP.
Decide y avanza sin puntos ciegos
- Mida RAM/trabajador y longitud de la cola bajo carga real.
- Calcular max_children con margen; Elija dinámico o estático.
- Habilite el registro lento, corrija los scripts enumerados.
- Volver a probar carga y TTFB; Sólo compare el alojamiento si la piscina es saludable.
Para obtener un diagnóstico previo, lea TTFB alto. Para filtrar un VPS con acceso completo al pool, navegue por el directorio o la comparación.
Preguntas frecuentes
¿Cómo calcular pm.max_children?
RAM disponible para PHP dividida por el consumo medio de un trabajador bajo carga, con un margen del 20-30%.
dinámico, bajo demanda o estático: ¿cuál elegir?
dinámico para tráfico variable; estática para carga estable; ondemand si la RAM es muy limitada y está de acuerdo con la latencia de arranque.
¿Qué hacer cuando el registro lento llena el disco?
Umbral realista, corrección de script, no solo rotación de registros.
¿Puede el host bloquear mis cambios de FPM?
Sí, compartido; en VPS usted controla el grupo: verifique los límites contractuales.
Antes de aumentar los trabajadores, pregunte: ¿cuántos MB por solicitud y cuántos segundos por secuencia de comandos? Si no lo sabe, el ajuste de FPM es una lotería, no una explotación.
