prefork mpm apache

prefork - apache2 mpm



Apache Prefork vs Worker MPM (6)

Echa un vistazo a this para obtener más detalles. Se refiere a cómo maneja Apache múltiples solicitudes. Preforking, que es el predeterminado, inicia una serie de procesos Apache (2 por defecto aquí, aunque creo que uno 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 con la memoria. Históricamente, Apache ha utilizado prefork, por lo que es un modelo mejor probado. El enhebrado solo se agregó en 2.0.

Al mirar el archivo de configuración de Apache, veo Prefork y Worker MPM definidos. ¿Cuál es la diferencia y cuál usa Apache?


Es fácil cambiar entre prefork o trabajador mpm en Apache 2.4 en RHEL7

Verifica el tipo de MPM ejecutando

sudo httpd -V Server version: Apache/2.4.6 (Red Hat Enterprise Linux) Server built: Jul 26 2017 04:45:44 Server''s Module Magic Number: 20120211:24 Server loaded: APR 1.4.8, APR-UTIL 1.5.2 Compiled using: APR 1.4.8, APR-UTIL 1.5.2 Architecture: 64-bit Server MPM: prefork threaded: no forked: yes (variable process count) Server compiled with.... -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_SYSVSEM_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=256 -D HTTPD_ROOT="/etc/httpd" -D SUEXEC_BIN="/usr/sbin/suexec" -D DEFAULT_PIDLOG="/run/httpd/httpd.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="conf/mime.types" -D SERVER_CONFIG_FILE="conf/httpd.conf"

Ahora para cambiar MPM edite el archivo siguiente y elimine el comentario de MPM requerido

/etc/httpd/conf.modules.d/00-mpm.conf # Select the MPM module which should be used by uncommenting exactly # one of the following LoadModule lines: # prefork MPM: Implements a non-threaded, pre-forking web server # See: http://httpd.apache.org/docs/2.4/mod/prefork.html LoadModule mpm_prefork_module modules/mod_mpm_prefork.so # worker MPM: Multi-Processing Module implementing a hybrid # multi-threaded multi-process web server # See: http://httpd.apache.org/docs/2.4/mod/worker.html # #LoadModule mpm_worker_module modules/mod_mpm_worker.so # event MPM: A variant of the worker MPM with the goal of consuming # threads only for connections with active processing # See: http://httpd.apache.org/docs/2.4/mod/event.html # #LoadModule mpm_event_module modules/mod_mpm_event.so


Los módulos de procesamiento múltiple (MPM) de Apache son responsables de vincular los puertos de red en la máquina, aceptar solicitudes y enviar niños para manejar las solicitudes ( httpd.apache.org/docs/2.2/mpm.html ).

Son como cualquier otro módulo de Apache, excepto que solo uno y solo un MPM debe cargarse en el servidor en cualquier momento . Los MPM se eligen durante la configuración y se compilan en el servidor utilizando el argumento --with-mpm=NAME con el script de configuración donde NAME es el nombre del MPM deseado.

Apache utilizará un MPM predeterminado para cada sistema operativo a menos que se elija uno diferente en tiempo de compilación (por ejemplo, en Windows mpm_winnt se usa de manera predeterminada). Aquí está la lista de sistemas operativos y sus MPM predeterminados:

Para verificar qué módulos están compilados en el servidor, use la opción de línea de comandos -l ( here está la documentación). Por ejemplo, en una instalación de Windows, puede obtener algo como:

> httpd -l Compiled in modules: core.c mod_win32.c mpm_winnt.c http_core.c mod_so.c

A partir de la versión 2.2, esta es la lista de funciones principales disponibles y módulos MPM :

  • core - Funciones del servidor HTTP Apache HTTP que están siempre disponibles
  • mpm_common : una colección de directivas implementadas por más de un módulo de procesamiento múltiple (MPM)
  • beos : este módulo de procesamiento múltiple está optimizado para BeOS.
  • event - Una variante experimental del trabajador estándar MPM
  • mpm_netware Módulo de multiprocesamiento que implementa un servidor web exclusivamente enhebrado optimizado para Novell NetWare
  • mpmt_os2 híbrido, multiproceso MPM para OS / 2
  • prefork Implementa un servidor web no preconfigurado y pretenedor
  • mpm_winnt : este módulo de procesamiento múltiple está optimizado para Windows NT.
  • worker - Módulo de procesamiento múltiple que implementa un servidor web multiproceso híbrido multiproceso

Ahora, a la diferencia entre prefork y worker .

El prefork MPM

implementa un servidor web no preconfigurado y pretenedor que maneja las solicitudes de forma similar a Apache 1.3. Es apropiado para los sitios que necesitan evitar el enhebrado para la compatibilidad con bibliotecas que no sean seguras para subprocesos. También es el mejor MPM para aislar cada solicitud, por lo que un problema con una única solicitud no afectará a ninguna otra.

El worker MPM implementa un servidor multiproceso multiproceso híbrido y ofrece un mejor rendimiento, por lo tanto, debe preferirse a menos que uno esté utilizando otros módulos que contengan bibliotecas que no sean seguras para subprocesos (consulte también esta explicación o this en Serverfault).


Para CentOS 6.xy 7.x (incluido Amazon Linux), use:

sudo httpd -V

Esto le mostrará cuáles de los MPM están configurados. Ya sea prefork, trabajador o evento. Prefork es el modelo anterior, seguro para hilos. Worker es multi-threaded, y event admite php-mpm, que se supone es un mejor sistema para manejar hilos y solicitudes.

Sin embargo, los resultados pueden variar según la configuración. He visto mucha inestabilidad en php-mpm y no mejoras en la velocidad. Una araña agresiva puede agotar los procesos hijos máximos en php-mpm con bastante facilidad.

La configuración para 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).

# Select the MPM module which should be used by uncommenting exactly # one of the following LoadModule lines: # prefork MPM: Implements a non-threaded, pre-forking web server # See: http://httpd.apache.org/docs/2.4/mod/prefork.html #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so # worker MPM: Multi-Processing Module implementing a hybrid # multi-threaded multi-process web server # See: http://httpd.apache.org/docs/2.4/mod/worker.html #LoadModule mpm_worker_module modules/mod_mpm_worker.so # event MPM: A variant of the worker MPM with the goal of consuming # threads only for connections with active processing # See: http://httpd.apache.org/docs/2.4/mod/event.html #LoadModule mpm_event_module modules/mod_mpm_event.so


Prefork y trabajador son dos tipos de MPM que apache proporciona. Ambos tienen sus méritos y deméritos.

Por defecto, mpm es prefork, que es seguro para subprocesos.

Prefork MPM utiliza múltiples procesos secundarios con un hilo cada uno y cada proceso maneja una conexión a la vez.

Worker MPM usa múltiples procesos hijos con muchos hilos cada uno. Cada hilo maneja una conexión a la vez.

Para obtener más información, puede visitar https://httpd.apache.org/docs/2.4/mpm.html y https://httpd.apache.org/docs/2.4/mod/prefork.html


Puede indicar si Apache está utilizando preform o worker emitiendo el siguiente comando

apache2ctl -l

En la salida resultante, busque menciones de prefork.c o worker.c