Optimización PHP-FPM en Nginx: Guía de Alto Rendimiento

optimización PHP-FPM

📅 Publicado el 19 de septiembre, 2026 · Por Equipo RedServicio

¿Qué es la optimización PHP-FPM y por qué importa en Nginx?

Optimizar PHP-FPM es, básicamente, ajustar la configuración del FastCGI Process Manager para que tu servidor atienda cuantas más peticiones mejor, con la menor latencia posible y sin atascharse. Nginx, a diferencia de Apache con mod_php, no ejecuta PHP él mismo: delega todo a procesos externos a través del protocolo FastCGI. Y ahí está la trampa. Un PHP-FPM mal calibrado es la causa más habitual de errores 502 Bad Gateway y de esa lentitud que aparece justo cuando el tráfico se dispara.

La buena noticia: con unas pocas directivas bien calculadas puedes multiplicar la capacidad del servidor sin gastar un euro en más hardware. Vamos al grano.

Cálculo de procesos: pm.max_children y el modo de gestión

Si solo puedes tocar un parámetro, que sea pm.max_children. Define cuántos procesos hijos pueden atender peticiones a la vez. Su valor depende del modo de gestión que elijas:

  • pm = static: número fijo de procesos. Para servidores dedicados con memoria estable y tráfico predecible, funciona de maravilla.
  • pm = dynamic: los procesos crecen y se reducen según la demanda. La opción sensata en un VPS con carga variable.
  • pm = ondemand: no se crea nada hasta que llega una petición. Útil cuando el tráfico es muy esporádico o tienes varios sitios conviviendo en la misma máquina.

Cómo calcular pm.max_children correctamente

La fórmula es sencilla:

pm.max_children = (Memoria RAM disponible para PHP) / (Memoria promedio por proceso PHP)
Un ejemplo: si destinas 2 GB a PHP y cada proceso consume de media 60 MB, tienes 2048 / 60 ≈ 34 hijos.

Para medir el consumo medio por proceso, este comando te lo da en un segundo:

  • ps --no-headers -o "rss,cmd" -C php-fpm8.2 | awk '{ sum+=$1 } END { printf "%d MB\n", sum/NR/1024 }'

¿Y una configuración dinámica razonable en un VPS de 4 GB? Algo así:

  • pm = dynamic
  • pm.max_children = 40
  • pm.start_servers = 8
  • pm.min_spare_servers = 4
  • pm.max_spare_servers = 12
  • pm.max_requests = 500 (recicla procesos y previene fugas de memoria)

Ajustes de Nginx para acompañar a PHP-FPM

No vale afinar solo un lado. Nginx también necesita su puesta a punto, o acabará siendo él el cuello de botella. Las directivas clave, en nginx.conf:

  • worker_processes auto; — un worker por núcleo de CPU.
  • worker_connections 2048; — conexiones simultáneas por worker.
  • keepalive_timeout 30; — reutiliza las conexiones del cliente.
  • fastcgi_buffers 16 16k; y fastcgi_buffer_size 32k; — evitan escrituras temporales a disco cuando la respuesta PHP es grande.

Conexión por socket Unix en lugar de TCP

Si Nginx y PHP-FPM viven en la misma máquina, usa un socket Unix. Gana a TCP (127.0.0.1:9000) en latencia, y no es poco:

  • listen = /run/php/php8.2-fpm.sock en el pool de PHP-FPM.
  • fastcgi_pass unix:/run/php/php8.2-fpm.sock; en Nginx.
  • Sube listen.backlog = 511 o más si esperas picos de tráfico.

Timeouts: equilibrio entre estabilidad y experiencia

Los tiempos de espera mal puestos acaban en errores 504 o procesos zombis deambulando por el sistema. Valores que funcionan:

  • request_terminate_timeout = 60s (PHP-FPM): mata los scripts colgados.
  • fastcgi_read_timeout 60; (Nginx): debe ser coherente con el anterior.
  • max_execution_time = 55 (php.ini): un pelín por debajo de los otros, para que PHP termine de forma controlada.

OpCache y JIT: el complemento imprescindible

Sin OpCache, PHP recompila cada script en cada petición. Un desperdicio de CPU difícil de justificar. Configuración base para php.ini:

  • opcache.enable = 1
  • opcache.memory_consumption = 256
  • opcache.max_accelerated_files = 20000
  • opcache.validate_timestamps = 1 con revalidate_freq = 2 (en producción muy exigente, quizá te compense desactivar la validación y limpiar caché en cada despliegue).

Y desde PHP 8, el JIT puede sumar en cargas de CPU intensiva:

  • opcache.jit = tracing
  • opcache.jit_buffer_size = 128M

Monitorización: cómo saber si tu configuración funciona

Optimizar a ciegas no sirve de nada. De verdad. Habilita pm.status_path = /status en tu pool y vigila métricas como listen queue (si es mayor que 0, te faltan procesos), max children reached (saturación histórica) y el uso de memoria por proceso. Complementa con htop, New Relic o la PHP-FPM status page, esta última protegida por IP, por favor.

Consejo de RedServicio: si gestionas varios sitios en un mismo servidor, crea un pool independiente por sitio con su propio pm.max_children. Así evitas que un CMS mal optimizado arrastre al resto.

Preguntas frecuentes

¿Por qué recib errores 502 Bad Gateway tras ajustar PHP-FPM?

Casi siempre porque Nginx no logra comunicarse con el socket o porque el límite de procesos se agotó. Comprueba que la ruta del fastcgi_pass coincide con el listen del pool y revisa los logs de PHP-FPM.

¿Static o dynamic para pm?

Servidor dedicado con tráfico constante: static, que evita el coste de crear procesos. VPS compartido o tráfico variable: dynamic reparte mejor la memoria.

¿Cada cuánto revisar estos ajustes?

Tras cada actualización mayor de PHP o de tu aplicación y, como mínimo, una vez al año. El consumo medio por proceso cambia con las versiones y con el código.

Conclusión

La optimización PHP-FPM no tiene ningún secreto místico. Mide el consumo real de tus procesos, calcula pm.max_children con datos (no a ojo), alinea los timeouts entre Nginx y PHP-FPM, usa sockets Unix y activa OpCache. Con eso documentado y monitorizado, tu servidor absorberá los picos de tráfico sin que los tiempos de respuesta se resientan.

Un último apunte: aplica los cambios de forma incremental y compara las métricas de estado antes y después de cada modificación. Y si prefieres no complicarte con la administración del servidor, en RedServicio.net ofrecemos hosting de calidad con soporte 24/7, donde nuestro equipo técnico puede ayudarte a afinar tu entorno PHP-FPM y Nginx para sacar el máximo rendimiento a tu web.

📝

Equipo RedServicio

Artículos escritos y revisados por nuestro equipo técnico especializado en hosting e infraestructura web en España.

¿Listo para un hosting de verdad?

Servidores en España · Soporte 24/7 en español · Migración gratuita

Ver Planes desde 3,95€/mes →

Te puede interesar:

Página Gratis — Crea tu web gratis

Clisec — Seguridad informática

Scroll al inicio