O apache 2.4 tem um limite rígido em conexões em algum lugar?

2

Estou usando o Apache 2.4 com o prefork.

As minhas diretivas MPM são definidas da seguinte forma:

<IfModule mpm_prefork_module>
MinSpareServers 200
MaxSpareServers 400
StartServers 200
ServerLimit 1300
MaxClients 1300
MaxRequestWorkers   1300
MaxRequestsPerChild 10000
</IfModule>

No entanto, minha página de status do servidor mostra:

Parent Server Config. Generation: 1
Parent Server MPM Generation: 0
Server uptime: 34 minutes 54 seconds
Total accesses: 551221 - Total Traffic: 11.8 GB
CPU Usage: u8151.55 s2320.18 cu.02 cs.11 - 500% CPU load
263 requests/sec - 5.8 MB/second - 22.5 kB/request
1024 requests currently being processed, 0 idle workers

WKWKKWWWWKWKKKWKKCRWWKWWKKWKKWKWKWKWWWWWKKKWKWWKKWKKWWWWWKWWKWWK
WWWWKWKWWWWWKWKKWKWKWCKWKKKKKWKKWWKKCKKKKWWWKKWKKWWWKKWCKKWKKKKW
WWKKWKKWWWKWKWWKKKWKKWWWKKWWKKKWWKKKKWKKWKCKKWKKWKKKKWWWKWKKWKWW
WWKWWKWWKKWKWKKWKRWKWKKWWWWWWKCKKKKKWWWKWWWKKKKWWKWWKWWKKKKWWKKK
WKKKWWWWWWWKWKWKWWKKWKKKKKKWKWWKWWWKKKKWKKKWWKKWWKKWKWKWWWWKKWKW
KWKWWWWKCWKKKCWKKWWWWWKWKWWKWKWRWKKWWKWKWKKWWKKWKWKWKKKKWWKKKWKW
WKKKKKWKKKKWWKWKWKWWWKKKWWKWCCKWKWWKKWKKWWCKKWWWWKKWKWWWWWWWWKKK
WWKKKWKWKKKKKKKKWKKKKKKKWWWCKWWWKKWWWWKWCWWKKKKWKWWKKKWKWKWWWWWW
WKWKKKWKWKKWWWWKWWWWWKKCWKWWKWKWWWWWWKWWWWKKWWWKWWWWKWKWKKKWKKWK
WWKKKWKWWWKKWWWKWKWKWKKKKWKWWWWWWWKKWWWWKKKCKKKWKWKWWWWKWKWWWWWW
WWKKKWKWWWKWWKWWKKWKWKWKWKKWKKWKKKCKKWWWKWCWKKWWKKWWKKWKKWWKKWWK
WWKKWKWKKWKWKWKWWKWKKWWKKWWKKKWKWWKKWWWKKWWKKCKKKWWKKWKWWWCWKKWK
KKWKWKWWWWWKKKKKKKWKWKWKWWWWKKKWWKWKWKKKWKWWWKWCWWKWKWWKKKWWWCWK
WCWCKWWKKWKWWKWKKWWWKKWWKRKWWKKWWWKWKWWKWKKWWWKKWWKWKWKWWWKWKWKW
WKWKWWKWKKKWWWKWWWKCWWWWKWWWKKKKKKWKWKKKKKKKKWKKWWWWWWWWWKWWWKKW
KWKKKWWKKWWKWKWWKKWWKKKKKWKWWWKKWKWWKWWWKKKWKWCKKKKWWKWWKWCKKCKK
SSSSSSSSSSSSSSSSSSSSSSSSS.......................................
................................................................
................................................................
................................................................
....................

Observe a linha que diz que 1024 solicitações estão sendo processadas atualmente com 0 trabalhadores ociosos. Ele apenas fixa 1024 pedidos.

Agora, no topo do meu /etc/init.d/httpd , tenho ulimit -HSn 32768 , portanto não acho que seja um problema de limite de arquivos abertos.

Eu não consigo pensar em por que as conexões estão sendo cortadas em 1024, mesmo que meus MaxClients estejam definidos mais alto e o status do servidor pareça querer mais conexões, mas pare em 1024.

    
por Mark 30.10.2012 / 18:15

2 respostas

3

De acordo com os documentos do Apache 2.4 ServerLimit :

There is a hard limit of ServerLimit 20000 compiled into the server (for the prefork MPM 200000).

Então, você não deve estar atingindo o limite máximo.

Eu tive problemas para ajustar ServerLimit em versões anteriores; tente apache2ctl stop e, em seguida, apache2ctl start . (Usando gracioso e até mesmo reiniciar não conseguiu pegar a mudança.)

Em uma observação secundária: talvez você queira reduzir seu KeepAliveTimeout e / ou MaxKeepAliveRequests ou tente KeepAlive Off , pois há muitos trabalhadores no estado "K". Além disso, esses 'S'es indicam que o servidor está tendo problemas para inicializar os trabalhadores, provavelmente devido à carga de 500% da CPU (que eu suponho que seja o máximo disponível.) Se ajustar as configurações do KeepAlive não ajudar, talvez seja necessário olhe para atualizar o servidor ou balanceamento de carga.

    
por 30.10.2012 / 20:07
-2

Você deve investigar o HA Proxy (se ainda não o fez) para dividir suas solicitações em vários servidores.

Mesmo em hardware rápido, você está bombeando muitos dados de uma única máquina. Se você precisar manter uma única máquina, tente o Nginx. Ele irá rodar círculos ao redor do Apache em alta carga.

    
por 30.10.2012 / 20:16