Aquí están mis restricciones de MPM:
<IfModule mpm_prefork_module>
StartServers 10
MinSpareServers 10
MaxSpareServers 10
MaxClients 10
MaxRequestsPerChild 2000
</IfModule>
Sin embargo, a pesar de esto, tengo más de 20 procesos de Apache ejecutándose actualmente, y en las últimas dos horas ha habido entre 40 y 50. ¿No deberían MaxClient y MaxSpareServers mantener el número de procesos bajo control (es decir, alrededor de 10)?
¿Se me escapa algo?
Respuesta1
Apache viene en diferentes sabores, dos de los más comunes sonprehorquillayobrero. El modelo prefork genera varios procesos, pero cada proceso maneja solo una solicitud a la vez. El modelo de trabajo, por otro lado, genera varios procesos y cada proceso tiene múltiples subprocesos, cada subproceso maneja una solicitud a la vez.
Dependiendo de su distribución, es posible que esté ejecutando un modelo diferente al que esperaba. Está esperando prefork pero ¿está seguro de que este es el tipo que se está ejecutando? Para saberlo escriba:
$httpd -V Versión del servidor: Apache/2.2.15 (Unix) Servidor construido: 28 de mayo de 2010 07:58:25 Número mágico del módulo del servidor: 20051115:24 Servidor cargado: APR 1.4.2, APR-Util 1.3.9 Compilado usando: APR 1.4.2, APR-Util 1.3.9 Arquitectura: 32 bits Servidor MPM: Prefork roscado: no bifurcado: sí (recuento de procesos variable)
En este caso mi caso Server MPM
es Prefork
pero el tuyo puede ser diferente. En mi servidor Debian que ejecuta Apache2 es Worker
:
#/usr/sbin/apache2 -V Versión del servidor: Apache/2.2.9 (Debian) Servidor MPM: Trabajador
En algunas máquinas (como RedHat) no es raro que estén presentes los binarios prefork y de trabajo (uno llamado httpd
y otro llamado httpd.worker
o algo similar). Es posible que desees volver a verificar (usando ps
o top
o cat /etc/init.d/httpd
) cuál se está iniciando realmente.
Respuesta2
Para cualquiera que se encuentre con esta pregunta, existe otra causa potencial.
Sé que crees que ya encontraste tu respuesta, pero con prefork deberías ver lo mismo en cualquier forma que mires sus procesos. No debes haber estado usando prefork.
Esta es la razón por:
http://httpd.apache.org/docs/2.4/mod/prefork.html
Este módulo de procesamiento múltiple (MPM) implementa un servidor web sin subprocesos y con bifurcación previa.
Una explicación diferente con la que me he topado
Cargar el módulo prefork antes de que funcionen las opciones de configuración, pero si lo carga después, parece cargar algunos valores predeterminados, lo que hace que su directiva IfModule sea inerte. Probablemente solo verás esto en una configuración personalizada de Apache, ya que las distribuciones lo tendrían configurado correctamente para comenzar.
Obras- se aplica la configuración
LoadModule mpm_prefork_module /usr/lib/apache2/modules/mod_mpm_prefork.so
<IfModule mpm_prefork_module>
StartServers 1
MinSpareServers 1
MaxSpareServers 0
ServerLimit 4
MaxClients 4
MaxRequestsPerChild 4000
</IfModule>
no funciona- la configuración no tiene ningún efecto
<IfModule mpm_prefork_module>
StartServers 1
MinSpareServers 1
MaxSpareServers 0
ServerLimit 4
MaxClients 4
MaxRequestsPerChild 4000
</IfModule>
LoadModule mpm_prefork_module /usr/lib/apache2/modules/mod_mpm_prefork.so
Respuesta3
Me siento un poco estúpido ahora, pero esto:¿Por qué htop muestra muchos procesos de apache2 mediante ps aux no?explica mi problema.