O que fazer depois de acessar as temidas 256 conexões máximas do Apache Limit

9

Depois de coçar a cabeça tentando descobrir por que meu site estava respondendo tão lentamente, apesar de os recursos do servidor estarem bem, finalmente chequei o status do Apache e descobri:

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 esgotado com conexões. Qualquer um que tente visitar o meu site é colocado em uma "lista de espera" até o Apache ficar livre novamente.

Parece que tenho duas opções.

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

Por padrão, o parâmetro MaxClients possui um limite máximo compilado de 256. Isso pode ser alterado recompilando o Apache no entanto. Algumas distribuições ou empresas de hospedagem aumentam esse limite para um valor muito alto, como 512 ou 1024, a fim de lidar com grandes cargas.

B) Localize scripts que estão consumindo muito tempo. Isso me parece muito mais complicado, já que a maioria dos processos apache simplesmente 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 uma delas) 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: http://pastebin.com/yBeLt6mP

Exemplo de Solicitação Parital: http://pastebin.com/vzUVDMPR

Alterne Quebrar texto se as caixas de pasta aparecerem estranhas.

kmoney12
fonte
O artigo que você citou tem ~ 6 anos de idade. Alterações de software. Veja a resposta de Shane.
Chris S
1
@ChrisS Ainda mais desatualizado - o limite compilado era uma coisa 1.x (a versão 2.0 foi lançada em 2002), e o artigo ainda vincula explicitamente os documentos 2.0.
Shane Madden

Respostas:

10

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

Para servidores não encadeados (ou seja, prefork), isso se MaxClientstraduz no número máximo de processos filhos que serão iniciados para atender solicitações. O valor padrão é 256; para aumentá-lo, você também deve aumentar ServerLimit.

ServerLimité o que tem o limite compilado, mas já passou de onde você deveria chegar sem que seu servidor se deparasse com outro gargalo. Documentação :

Existe um limite rígido ServerLimit 20000compilado no servidor (para o MPM 200000 prefork). Isso tem como objetivo evitar efeitos desagradáveis ​​causados ​​por erros de digitação.

Portanto, se você deseja aumentar o limite do seu cliente para algo como 512, então:

MaxClients 512
ServerLimit 512

Você também deve dar uma olhada em qual MPM você está usando, pois MPMs diferentes do prefork são melhores em escala. Veja aqui para mais informações.

Shane Madden
fonte
Vejo core.c e worker.c em execução httpd -l. Acho que isso significa que estou executando o trabalhador MPM?
kmoney12
@hellohellosharp verdade - nesse caso, você vai querer ajustar potencialmente sua MaxClients, ServerLimit, ThreadsPerChild, e ThreadLimit. Você pode fornecer sua configuração atual de trabalho httpd.conf?
Shane Madden
Sim ... existe algum perigo em publicá-lo publicamente? Espero que não, aqui está: pastebin.com/yBeLt6mP
kmoney12
Não, não há problemas em postar a maioria dos arquivos httpd.conf. Apenas verifique se você não tem algo estranho como comentários com senhas / nomes de usuário / etc. Às vezes, elas também aparecem nas seções de configuração de proxy. Muitas pessoas gostam de editar os nomes de IP e Domínio também, apenas para que eles não atrair a atenção
Chris S
1
o módulo de status pode mostrar esses detalhes.
ETL
-1

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

Shoshomiga
fonte
4
Realmente?? Ele precisa adicionar duas linhas de configuração httpd.confe sua solução é remover a maior parte do software que ele está executando e substituí-lo ?! Todo software possui seus problemas, mas o uso indevido sem instrução causa problemas piores.
Chris S
Em última análise, o nginx pode lidar com conexões mais ativas, cabe ao OP decidir o que usar, eu estava apresentando minha sugestão.
Shoshomiga 24/02