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

4

Aqui estão as 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 no momento, e nas últimas duas horas houve até 40-50. O MaxClient e MaxSpareServers não devem manter o número de processos sob controle (isto é, cerca de 10)?

Há algo que me falta?

    
por Josh Nankin 22.12.2010 / 07:24

3 respostas

2

O Apache vem em diferentes sabores, sendo dois dos mais comuns prefork e worker . O modelo prefork gera vários processos, mas cada processo lida apenas com um pedido de cada vez. O modelo de trabalho, por outro lado, gera vários processos e cada processo tem vários encadeamentos, cada encadeamento manipulando uma solicitação por vez.

Dependendo da sua distribuição, você pode estar executando um modelo diferente para o que você está esperando. Você está esperando prefork mas tem certeza que esse é o tipo que está sendo executado? Para descobrir o tipo:

$ httpd -V
Server version: Apache/2.2.15 (Unix)
Server built:   May 28 2010 07:58:25
Server's Module Magic Number: 20051115:24
Server loaded:  APR 1.4.2, APR-Util 1.3.9
Compiled using: APR 1.4.2, APR-Util 1.3.9
Architecture:   32-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)

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

# /usr/sbin/apache2 -V
Server version: Apache/2.2.9 (Debian)
Server MPM:     Worker

Em algumas máquinas (como RedHat) não é incomum que ambos os binários prefork e worker estejam presentes (um chamado httpd e outro chamado httpd.worker ou algo similar). Você pode querer verificar novamente (usando ps ou top ou cat /etc/init.d/httpd ) que está sendo lançado.

    
por 22.12.2010 / 09:44
1

Para qualquer outra pessoa que se deparar com esta questão, existe outra causa potencial.

Eu sei que você acredita que você já encontrou sua resposta, mas com o prefork você deve ver a mesma coisa de qualquer maneira que você olha para seus processos. Você não deve ter usado o prefork.

Por isso:

link

This Multi-Processing Module (MPM) implements a non-threaded, pre-forking web server.

Uma explicação diferente que encontrei em

Carregando 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 a sua diretiva IfModule inerte. Você provavelmente só verá isso em uma configuração personalizada do apache, já que as distribuições o configurariam corretamente para iniciar.

Obras - 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
    
por 23.10.2016 / 16:38