Apache gerando muitos processos apesar de maxclient e outras restrições

Apache gerando muitos processos apesar de maxclient e outras restrições

Aqui estão minhas restrições de MPM:

<IfModule mpm_prefork_module>
    StartServers         10
    MinSpareServers      10
    MaxSpareServers      10
    MaxClients           10
    MaxRequestsPerChild  2000
</IfModule>

No entanto, apesar disso, tenho mais de 20 processos Apache em execução atualmente e, nas últimas uma ou duas horas, ocorreram de 40 a 50. O MaxClient e o MaxSpareServers não deveriam manter o número de processos sob controle (ou seja, cerca de 10)?

Tem algo que estou perdendo?

Responder1

Apache vem em diferentes sabores, sendo dois dos mais comunspré-garfoetrabalhador. O modelo prefork gera vários processos, mas cada processo trata apenas uma solicitação por vez. O modelo de trabalho, por outro lado, gera vários processos e cada processo possui vários threads, cada thread lidando com uma solicitação por vez.

Dependendo da sua distribuição, você pode estar executando um modelo diferente daquele que espera. Você está esperando um pré-fork, mas tem certeza de que este é o tipo que está sendo executado? Para descobrir digite:

$httpd-V
Versão do servidor: Apache/2.2.15 (Unix)
Servidor construído: 28 de maio de 2010 07:58:25
Número Mágico do Módulo do Servidor: 20051115:24
Servidor carregado: APR 1.4.2, APR-Util 1.3.9
Compilado usando: APR 1.4.2, APR-Util 1.3.9
Arquitetura: 32 bits
Servidor MPM: Pré-fork
  rosqueado: não
    bifurcado: sim (contagem de processos variáveis)

Neste caso, o meu Server MPMé Prefork, mas o seu pode ser diferente. No meu servidor Debian rodando Apache2 é Worker:

#/usr/sbin/apache2 -V
Versão do servidor: Apache/2.2.9 (Debian)
Servidor MPM: Trabalhador

Em algumas máquinas (como RedHat) não é incomum a presença de binários prefork e de trabalho (um chamado httpde outro chamado httpd.workerou algo semelhante). Você pode querer verificar novamente (usando psou topou cat /etc/init.d/httpd) qual está realmente sendo iniciado.

Responder2

Para qualquer outra pessoa que se depare com esta questão, há outra causa potencial.

Eu sei que você acredita que já encontrou sua resposta, mas com o prefork você deve ver a mesma coisa de qualquer maneira que olhar para seus processos. Você não deve estar usando o pré-garfo.

Isso é por que:

http://httpd.apache.org/docs/2.4/mod/prefork.html

Este Módulo de Multiprocessamento (MPM) implementa um servidor web sem thread e pré-bifurcado.


Uma explicação diferente que encontrei

Carregar o módulo prefork antes que as opções de configuração funcionem, mas se você carregá-lo depois, parece carregar alguns padrões, tornando sua diretiva IfModule inerte. Você provavelmente verá isso apenas em uma configuração personalizada do Apache, já que as distribuições o configurariam corretamente para iniciar.

Funciona- a configuração é aplicada

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>

Não funciona- a configuração não tem efeito

<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

Responder3

Eu me sinto meio estúpido agora, mas isso:Por que o htop mostra muitos processos do Apache2 por ps aux, não?explica meu problema.

informação relacionada