Qué es PHP-FPM y cómo gestiona los procesos

Autor: Publicado

En pocas palabras: PHP-FPM (FastCGI Process Manager) es un gestor de los procesos que ejecutan código PHP en el servidor. Trabaja con el servidor web y administra procesos de trabajo capaces de atender sucesivas peticiones sin iniciar de nuevo el intérprete cada vez. Facilita el funcionamiento eficiente de sitios, por ejemplo los basados en WordPress, pero por sí solo no garantiza un menor tiempo de carga: también influyen el código de la aplicación, la base de datos y los recursos disponibles.

Cómo atiende PHP-FPM una petición de página

Cuando un usuario abre una página que requiere ejecutar PHP, la petición llega primero al servidor web, como Nginx o Apache. Este delega la tarea en PHP-FPM mediante FastCGI, un protocolo de comunicación entre el servidor web y el proceso que ejecuta la aplicación. PHP-FPM asigna la petición a un proceso de trabajo y el resultado de la ejecución del código vuelve al servidor web y, después, al navegador.

Un proceso de trabajo es un proceso de PHP en ejecución y listo para ejecutar un script. Una vez atendida una petición, normalmente queda disponible para la siguiente en lugar de finalizar de inmediato. Así se evita el coste de iniciar un nuevo intérprete cada vez, como ocurre con el CGI clásico.

Por ejemplo, acceder a una página dinámica de WordPress puede requerir ejecutar PHP, leer datos de la base de datos y generar HTML. PHP-FPM se encarga de ejecutar la parte de PHP, no de todas las etapas de entrega de la página. El servidor web suele servir los archivos CSS, las imágenes y otros recursos estáticos sin su intervención.

En qué se diferencia PHP-FPM de PHP y del servidor web

PHP es un lenguaje y un entorno de ejecución de código, mientras que PHP-FPM gestiona los procesos de ese entorno. No es un lenguaje independiente, un sistema de gestión de contenidos ni un sustituto de Nginx o Apache. Estos componentes cumplen funciones distintas y pueden trabajar juntos.

Nginx delega la ejecución de los scripts PHP en un mecanismo externo, que a menudo es PHP-FPM. Apache también puede utilizar PHP-FPM, aunque existen configuraciones con el módulo mod_php, que ejecuta PHP dentro de los procesos de Apache. Por tanto, no hay que dar por hecho que todos los servidores con PHP funcionan de la misma manera.

PHP-FPM tampoco sustituye a OPcache. OPcache almacena en memoria el código PHP compilado, lo que reduce la necesidad de volver a analizar y compilar los archivos. PHP-FPM gestiona los procesos y OPcache reduce parte del trabajo que estos realizan: ambas soluciones pueden complementarse.

Cuándo ayuda PHP-FPM y qué no puede solucionar

PHP-FPM permite controlar el número de procesos, su inicio y su recreación. Así ayuda a adaptar la ejecución de la aplicación a los recursos del servidor y al número de peticiones simultáneas. Sin embargo, activarlo no siempre supone una mejora notable de velocidad frente a cualquier otro método de ejecución de PHP correctamente configurado.

Si una tienda tarda en responder porque espera el resultado de una consulta lenta a la base de datos, PHP-FPM por sí solo no acelerará esa consulta. Tampoco eliminará los retrasos de una API externa ni las operaciones costosas que realice un complemento. Aumentar el número de procesos puede incluso agravar la sobrecarga de la base de datos o agotar la memoria.

También importa la caché de páginas completas. Si se puede devolver el HTML ya generado sin ejecutar PHP, esa petición no ocupa un proceso de PHP-FPM. El caso es distinto al acceder al carrito, al panel de administración o a una página personalizada, donde puede ser necesario ejecutar código.

Los ajustes más importantes de los procesos

PHP-FPM organiza los procesos en grupos, es decir, conjuntos de procesos de trabajo que se configuran por separado. Cada grupo puede tener límites distintos y ejecutarse con los permisos de diferentes usuarios del sistema, lo que facilita separar las aplicaciones. Sin embargo, dividir los procesos en grupos no proporciona por sí solo un aislamiento de seguridad completo.

El ajuste pm determina cómo se mantienen los procesos:

El parámetro pm.max_children determina el número máximo de procesos de trabajo de un grupo y, por tanto, el número de peticiones PHP que puede ejecutar simultáneamente. Cuando todos los procesos están ocupados, las nuevas peticiones pueden quedar en cola. Una espera demasiado larga o una sobrecarga pueden provocar un error.

Por ejemplo, con un límite de 10 procesos, once peticiones simultáneas que requieran PHP no se ejecutarán todas a la vez. Esto no significa que el sitio tenga un límite de 10 usuarios: un usuario no ocupa un proceso durante todo el tiempo que navega, sino solo mientras se atiende una petición concreta.

Cómo comprobar si hay que cambiar la configuración

En un alojamiento compartido, el proveedor suele gestionar los ajustes de PHP-FPM. Es posible que el panel solo te permita elegir la versión de PHP y modificar algunos límites. Confirma la disponibilidad de PHP-FPM, las opciones de configuración y las restricciones de recursos en la documentación o con el soporte técnico del alojamiento.

En un servidor propio, empieza por medir, no por aumentar los límites. Comprueba si el grupo alcanza pm.max_children, cuánta memoria consumen los procesos bajo carga y si el procesador y la base de datos tienen margen de capacidad. El registro de peticiones lentas de PHP-FPM, debidamente configurado, puede ayudar a identificar el código que tarda mucho en ejecutarse.

Como siguiente paso práctico, elige una operación lenta, por ejemplo abrir el carrito, y determina si el retraso se debe a la espera de un proceso libre o a la propia ejecución de la aplicación. Solo a partir de ese resultado podrás justificar un cambio en los límites de PHP-FPM o la necesidad de trabajar en el código y la base de datos.

Consulta también: ¿Qué significa www?

Lee también

Conoce BIND, el software abierto de servidor DNS: sus funciones, cómo gestiona dominios y cuándo conviene instalarlo por tu cuenta.
Descubre qué son el registro REGON de Polonia y su número, en qué se diferencian de NIP y KRS y cómo verificar los datos de una empresa.
Conoce los principales Security Headers, cómo protegen tu web y cómo comprobarlos y configurarlos sin bloquear funciones necesarias.