Relación entre la configuración de PHP-FPM y mpm_worker (Apache)

Relación entre la configuración de PHP-FPM y mpm_worker (Apache)

Tengo un sitio que ejecuta Magento con la siguiente configuración:

  • Apache 2.4 con mpm_worker
  • PHP-FPM
  • RAM total en el servidor: 14 GB (10 GB disponibles para Apache/PHP)

Cada proceso PHP-FPM consume aproximadamente 80 MB de RAM.

Quiero ajustar la configuración de PHP-FPM y mpm_worker. Al leer la documentación, estoy un poco confundido acerca de la relación entre las opciones en PHP-FPM y mpm_worker.

Por ejemplo, PHP-FPM tiene configuraciones: pm.min_spare_servers, pm.max_spare_serversy . Entiendo lo que significan estas opciones con respecto a PHP-FPM.pm.start_serversmax_children

Sin embargo, mpm_worker tiene las siguientes configuraciones: MinSpareThreads, y . Nuevamente, aislado de mpm_worker, entiendo lo que hacen.MaxSpareThreadsStartServersThreadLimit

Mi pregunta es: ¿Cómo se relacionan estas configuraciones entre sí? Digamos que configuro StartServers=2y ThreadsPerChild=25. Para empezar, esto me daría 50 subprocesos con respecto a Apache/mpm_worker. Si luego configuro pm.start_servers = 50, PHP-FPM generará 50 procesos inicialmente.

Entonces, ¿cuál es la relación entre estos 50 subprocesos "Apache" y 50 procesos "PHP-FPM"? ¿Cada hilo de Apache utiliza un proceso PHP-FPM?

Espero que alguien pueda darnos una idea de esto.

¡Gracias!

Respuesta1

Apache atiende las solicitudes de los clientes utilizando los subprocesos, pero solo llamará a PHP-FPM para archivos php; las imágenes, css y js deben entregarse directamente desde Apache y, por lo tanto, no consumirán un subproceso PHP-FPM.

PHP-FPM tiene múltiples subprocesos sin hijos: cada subproceso atiende una solicitud de Apache.

AFAIK, múltiples solicitudes del mismo cliente (cargando la página, además de imágenes, css y js) deberían consumir múltiples subprocesos si no tiene KeepAlive configurado en Apache.Ver este enlacepara obtener más información sobre KeepAlive.

Yo mismo estuve ajustando un servidor Apache recientemente y descubrí que si tienes varios núcleos, es mejor aumentar el número de hijos por subproceso.

Respuesta2

La relación se mapea dinámicamente. Son procesos separados que también se pueden ejecutar en servidores separados, por lo que tienes muchas opciones de configuración.

Los procesos/hilos de Apache manejan conexiones iniciales que luego usan procesos php-fpm para analizar archivos PHP para devolver solicitudes.

Hay muchas variables aquí para aconsejarle sobre cómo configurarlas, pero en general configure Apache para que tenga suficientes subprocesos para manejar solicitudes en tiempo real y configure php-fpm para que sus scripts PHP/wensites tengan suficiente memoria para ejecutarse. Con varias opciones de almacenamiento en caché posibles, esto sólo se puede decidir comparando un sistema en ejecución.

información relacionada