O que fazer depois de ter atingido as conexões com o limite máximo de 256 Apache Limite

7

Depois de coçar minha cabeça tentando descobrir por que meu site estava respondendo tão lentamente, embora os recursos do servidor estivessem bem, finalmente verifiquei o status do Apache e encontrei:

78 requests/sec - 0.7 MB/second - 8.5 kB/request
256 requests currently being processed, 0 idle workers

Parece que meu apache está literalmente maximizado com conexões. Qualquer um que tente visitar meu site é colocado em uma "lista de espera" até que o Apache esteja livre novamente.

Parece que tenho duas opções.

A) Aumentar o limite máximo de conexões acima de 256. Embora de acordo com este artigo não é tão fácil:

By default, the MaxClients parameter has a compiled in hard limit of 256. This can be changed by recompiling Apache however. Some distributions, or hosting companies raise this limit to a very high value, such as 512 or even 1024 in order to cope with large loads.

B) Localize os scripts que estão ocupando muito tempo. Isso parece muito mais complicado para mim, já que a maioria dos processos do apache aparece e desaparece novamente. Além disso, os scripts PHP dos meus sites são otimizados muito bem ... e mais uma vez, os recursos do servidor são bons:

Server load 2.69 (8 CPUs)   
Memory Used 25.33% (2,039,108 of 8,048,804) 
Swap Used   1.32% (54,156 of 4,095,992)

Qual opção (se algum deles) devo escolher e como devo fazer?

EDITAR

Mais informações: Versão do servidor: Apache / 2.2.23 (Unix) mod_ssl / 2.2.23 OpenSSL / 1.0.0-fips DAV / 2 mod_auth_passthrough / 2.1 mod_bwlimited / 1.4 FrontPage / 5.0.2.2635

Conf HTTP: link

Amostra do Pedido Parital: link

Alterne o Text-Wrap se as pastas de pasta aparecerem estranhas.

    
por kmoney12 23.02.2013 / 21:40

2 respostas

9

Esse artigo é impreciso; MaxClients pode ser aumentado acima de 256 ao usar o prefork MPM (que é o que eu suponho que você esteja usando atualmente com base na sua descrição do problema). A partir da documentação :

For non-threaded servers (i.e., prefork), MaxClients translates into the maximum number of child processes that will be launched to serve requests. The default value is 256; to increase it, you must also raise ServerLimit.

ServerLimit é aquele que tem o limite de hard-compilado, mas já passou de um ponto a outro em que você deveria alcançar sem que seu servidor tivesse algum outro gargalo. Documentação :

There is a hard limit of ServerLimit 20000 compiled into the server (for the prefork MPM 200000). This is intended to avoid nasty effects caused by typos.

Então, se você quiser aumentar seu limite de clientes para algo como 512, então:

MaxClients 512
ServerLimit 512

Você também deve dar uma olhada em qual MPM você está usando, já que outros MPMs além do prefork são melhores em escala. Consulte aqui para obter mais informações.

    
por 23.02.2013 / 21:48
-1

Eu sugiro que você use um proxy reverso, algo como nginx ou lighttpd pode lidar com muito mais conexões do que o apache. Dependendo de como seus sites usam o htaccess, você também pode usar o nginx / lighttpd com o fcgi e abrir completamente o apache.

    
por 23.02.2013 / 21:48