Apache genera demasiados procesos a pesar de maxclient y otras limitaciones

Apache genera demasiados procesos a pesar de maxclient y otras limitaciones

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 MPMes Preforkpero 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 httpdy otro llamado httpd.workero algo similar). Es posible que desees volver a verificar (usando pso topo 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.

información relacionada