¿Cómo puedo saber si Apache se está ejecutando como prefork o trabajador?

40

¿Cómo puedo saber si Apache se está ejecutando (o configurado para ejecutarse) como prefork o trabajador?


fuente
2
o más técnicamente 'compilado para ejecutarse como'

Respuestas:

37

El MPM se configura en tiempo de compilación. Una forma de resolverlo después es hacer una lista compilada en módulos. Esa lista incluirá el MPM elegido. El listado se puede lograr ejecutando el binario apache, con el indicador -l.

andreas@halleck:~$ apache2 -l
Compiled in modules:
 core.c
 mod_log_config.c
 mod_logio.c
 worker.c
 http_core.c
 mod_so.c
andreas@halleck:~$ 

Aquí encontramos el módulo worker.c, por lo tanto, estoy ejecutando el MPM de trabajo.

andol
fuente
44
Esta respuesta es incorrecta. Mira mi respuesta.
Chris Johnson
1
Hm, en Ubuntu no tengo ni trabajador ni prefork que aparece cuando hago esto ...
mlissner
2
En Ubuntu puedes usar apache2ctl -Mpara enumerar los módulos activos.
SteffenNielsen
53

Las respuestas dadas por Series8217 y Andol son incorrectas.

La pregunta era cómo saber si Apache ejecuta prefork o trabajador. El consejo dado por las otras respuestas solo dice cuál es el MPM predeterminado (basado en módulos compilados), no si ese valor predeterminado u otra opción se está utilizando en este momento.

Si httpd -Vmuestra prefork, eso solo significa que prefork es el MPM predeterminado compilado. Eso se puede anular cambiando la configuración del archivo de configuración de Apache, como se muestra en este proceso:

  1. Edite el archivo de configuración (p. Ej. /etc/sysconfig/httpdEn CentOS / RedHat)
  2. Agregue o descomente esta línea: HTTPD=/usr/sbin/httpd.worker
  3. Reiniciar Apache

El MPM que se está ejecutando realmente se puede mostrar usando este proceso:

  1. Habilitar Apache mod_info
  2. Consulta la url mod_info, normalmente curl localhost/server-info
  3. La sección "Configuración del servidor" mostrará "Nombre MPM: Trabajador"
  4. Ejecutar de httpd -Vnuevo: seguirá mostrando prefork, no trabajador

Línea de fondo:

  • httpd -V muestra la opción predeterminada, no qué opción está realmente en uso

Hay respuestas en muchos, muchos sitios web que dicen, httpd -Vúselo para saber si Apache está ejecutando prefork o trabajador. Todos están equivocados. Pruebe el procedimiento anterior para verlo usted mismo.

Chris Johnson
fuente
Para su información, de acuerdo con httpd.apache.org/docs/trunk/mpm.html, el MPM puede ser un módulo estático en todas las plataformas, o construido como un DSO (en Unix). Cuando se construye como un módulo estático, "el servidor debe reconstruirse para cambiar el MPM". ¿La documentación de Apache es incorrecta acerca de que el módulo estático MPM no se puede cambiar, excepto mediante la reconstrucción del servidor?
Steven T. Snyder
Esto se parece mucho a algo específico de la distribución, con un envoltorio de nivel superior.
andol
2
En CentOS 6.6 / usr / sbin / httpd, /usr/sbin/httpd.event y /usr/sbin/httpd.worker son binarios distintos con diferentes MPM configurados en tiempo de compilación (prefork, event y trabajador respectivamente). Cambiar la configuración de HTTPD en / etc / sysconfig / httpd solo controla qué binario es ejecutado por el script de inicio.
Paul Haldane
Tuve que ejecutar apache2 -V en lugar de httpd -V en Ubuntu 16.04 LTS
cnizzardini
41

En Ubuntu 14.04

a2query -M

Dice event, prefork,worker

Puede cambiarlo agregando enlaces simbólicos de mpm_<chosen>from mods-availablea mods-enabledin /etc/apache2.

Solo se permite uno a la vez.

JorgeeFG
fuente
2
Esta debe ser la respuesta aceptada.
sí, gran respuesta! simple y devuelve lo que se necesita
Flash Thunder
Trabajó para mí lo mejor, gracias (trabajó en Apache 2.4 ... parece que no funciona en Apache 2.2)
dmikam
El eventMPM es, según el sitio de Apache, "una variante del MPM trabajador con el objetivo de consumir hilos solo para conexiones con procesamiento activo".
Jonathan Berger
7

En RedHat y derivados, simplemente inicie topo ps auxy mire el nombre del proceso httpd:

  • httpd significa que Apache se está ejecutando como prefork
  • httpd.worker significa que se está ejecutando como trabajador
Corrado Fiore
fuente
4

En RHEL / Fedora / etc, ejecute httpd -V. Obtendrá algunos resultados que incluyen lo siguiente:

Server version: Apache/2.2.21 (Unix)
     ...
Architecture:   64-bit
Server MPM:     Prefork
     ...

Aquí 'Server MPM' es 'Prefork', por lo que mi servidor está ejecutando el prefork MPM.

Steven T. Snyder
fuente
Esta respuesta es incorrecta. Mira mi respuesta.
Chris Johnson
@ChrisJohnson, descubrimiento interesante ... Comprendí que el MPM no se podía cambiar por configuración, solo por compilación. Parece que el OP pensó lo mismo, ya que comentó su pregunta con "o más técnicamente 'compilado para ejecutarse como'". Buscaré reproducir su respuesta y una vez que la haya confirmado, revocaré la mía.
Steven T. Snyder
Confirmé a través de la documentación de apache en httpd.apache.org/docs/trunk/mpm.html que los MPM se pueden construir como módulos DSO y cargar dinámicamente con la directiva LoadModule, en "Unix y plataformas similares". Entonces, el MPM se puede cambiar en el momento de la carga bajo ciertas circunstancias (que podría ser la configuración más común en estos días ...)
Steven T. Snyder
4

Chris Johnson tiene razón. Vaya a httpd.conf => agregue esta línea:

<Location /server-info>
SetHandler server-info
</Location>

Reinicie apache: /etc/init.d/httpd restart. Luego acceda a localhost / server-info desde su navegador y mire la sección Nombre de MPM .

Songpham
fuente
Aún mejor, ponlo entre <IfModule info_module> </IfModule>
Lexib0y
3

Aquí hay otro método que espero que sea confiable para determinar qué MPM está en uso. Agregue lo siguiente a su httpd.conf:

<IfModule prefork.c>
    Header append X-MPM prefork
</IfModule>
<IfModule worker.c>
    Header append X-MPM worker
</IfModule>

Luego verifique los encabezados usando curl -I localhost | grep X-MPM.

Quinn Commandado
fuente
3

en centos (o rhel) puede ejecutar este comando:

ps -ef | grep httpd

si ve /usr/sbin/httpd.workerque se está ejecutando, está utilizando el MPM de trabajo si ves /usr/sbin/httpdcorrer, entonces está usando prefork

James Turner
fuente
2

La respuesta de Chris Johnson es correcta.

Después de habilitar el módulo de información, como se documenta en la Documentación de Apache ( http://httpd.apache.org/docs/2.2/mod/mod_info.html ), este revestimiento le dará el MPM que está utilizando:

links -dump http://localhost/server-info/?server | grep "MPM Name"
Manu
fuente
2

Una forma de resolverlo en Debian como distribuciones es ejecutando:

apachectl -V | grep -i mpm
Maleficio
fuente