Mirando el archivo de configuración de Apache, veo Prefork y Worker MPM definidos. ¿Cuál es la diferencia y cuál está usando Apache?
113
Prefork y worker son dos tipos de MPM que proporciona apache. Ambos tienen sus méritos y deméritos.
Por defecto, mpm es prefork, que es seguro para subprocesos.
Prefork MPM utiliza varios procesos secundarios con un hilo cada uno y cada proceso maneja una conexión a la vez.
Worker MPM utiliza varios procesos secundarios con muchos subprocesos cada uno. Cada hilo maneja una conexión a la vez.
Para obtener más detalles, puede visitar https://httpd.apache.org/docs/2.4/mpm.html y https://httpd.apache.org/docs/2.4/mod/prefork.html
Los módulos de multiprocesamiento (MPM) de Apache son responsables de vincularse a los puertos de red en la máquina, aceptar solicitudes y enviar a los niños para manejar las solicitudes ( http://httpd.apache.org/docs/2.2/mpm.html ).
Son como cualquier otro módulo de Apache, excepto que solo se debe cargar uno y solo un MPM en el servidor en cualquier momento . Los MPM se eligen durante la configuración y se compilan en el servidor usando el argumento
--with-mpm=NAME
con el script de configuración dondeNAME
está el nombre del MPM deseado.Apache usará un MPM predeterminado para cada sistema operativo a menos que se elija uno diferente en el momento de la compilación (por ejemplo, en Windows
mpm_winnt
se usa de manera predeterminada). Aquí está la lista de sistemas operativos y sus MPM predeterminados:beos
mpm_netware
mpmt_os2
prefork
( actualización para la versión de Apache ≥ 2,4 :prefork
,worker
oevent
, dependiendo de las capacidades de la plataforma)mpm_winnt
Para verificar qué módulos están compilados en el servidor, use la opción de línea de comandos
-l
( aquí está la documentación). Por ejemplo, en una instalación de Windows, puede obtener algo como:A partir de la versión 2.2, esta es la lista de funciones principales y módulos MPM disponibles :
core
- Funciones principales del servidor HTTP Apache que siempre están disponiblesmpm_common
- Una colección de directivas implementadas por más de un módulo de multiprocesamiento (MPM)beos
- Este módulo de multiprocesamiento está optimizado para BeOS.event
- Una variante experimental del MPM trabajador estándarmpm_netware
Módulo de multiprocesamiento que implementa un servidor web con subprocesos exclusivos optimizado para Novell NetWarempmt_os2
MPM híbrido multiproceso y multiproceso para OS / 2prefork
Implementa un servidor web pre-bifurcado sin subprocesosmpm_winnt
- Este módulo de multiprocesamiento está optimizado para Windows NT.worker
- Módulo multiproceso que implementa un servidor web multiproceso multiproceso híbridoAhora, a la diferencia entre
prefork
yworker
.El
prefork
MPMEl
worker
MPM implementa un servidor híbrido multiproceso de múltiples subprocesos y ofrece un mejor rendimiento, por lo que debería preferirse a menos que uno esté utilizando otros módulos que contengan bibliotecas no seguras para subprocesos (consulte también esta discusión o esto en Serverfault).fuente
Eche un vistazo a esto para obtener más detalles. Se refiere a cómo Apache maneja múltiples solicitudes. Preforking, que es el predeterminado, inicia una serie de procesos de Apache (2 de forma predeterminada aquí, aunque creo que se puede configurar esto a través de httpd.conf). Worker MPM iniciará un nuevo hilo por solicitud, lo que supongo que es más eficiente en memoria. Históricamente, Apache ha utilizado prefork, por lo que es un modelo mejor probado. El subprocesamiento solo se agregó en 2.0.
fuente
Para CentOS 6.xy 7.x (incluido Amazon Linux) utilice:
Esto le mostrará cuáles de los MPM están configurados. Ya sea prefork, trabajador o evento. Prefork es el modelo anterior, seguro para subprocesos. Worker tiene varios subprocesos y el evento admite php-mpm, que se supone que es un mejor sistema para manejar subprocesos y solicitudes.
Sin embargo, sus resultados pueden variar según la configuración. He visto mucha inestabilidad en php-mpm y ninguna mejora de velocidad. Una araña agresiva puede agotar el máximo de procesos secundarios en php-mpm con bastante facilidad.
La configuración de prefork, worker o event se establece en sudo nano /etc/httpd/conf.modules.d/00-mpm.conf (para CentOS 6.x / 7.x / Apache 2.4).
fuente
Puede saber si Apache está usando preforma o trabajador emitiendo el siguiente comando
En el resultado resultante, busque menciones de prefork.c o worker.c
fuente
apachectl -V
mirar la salida junto aServer MPM
. También puede comprobarps aux
y buscarhttpd
ohttpd.worker
.apache2ctl -l
no funcionó; tuvo que usarapachectl -l
.httpd -V
dará algo como:Server MPM: worker
Es fácil cambiar entre prefork o worker mpm en Apache 2.4 en RHEL7
Verifique el tipo de MPM ejecutando
Ahora para cambiar MPM, edite el siguiente archivo y descomente el MPM requerido
fuente
Apache tiene 2 tipos de MPM (módulos multiprocesamiento) definidos:
1: Prefork 2: Trabajador
De forma predeterminada, Apacke está configurado en modo pre-bifurcado, es decir, servidor web pre-bifurcado sin subprocesos. Eso significa que cada proceso secundario de Apache contiene un solo hilo y maneja una solicitud a la vez. Por eso, consume más recursos.
Apache también tiene el MPM trabajador que convierte Apache en un servidor web multiproceso y multiproceso. Worker MPM utiliza varios procesos secundarios con muchos subprocesos cada uno.
fuente