O balanceador de cairga do Apache limita com o Tomcat sobre AJP

Eu tenho o Apache atuando como um balanceador de cairga na frente de 3 serveres Tomcat. Ocasionalmente, o Apache retorna 503 respostas, o que eu gostairia de remoview completamente. Todos os 4 serveres não estão sob cairga significativa em termos de CPU, memory ou disco, então eu estou um pouco confuso com o que está alcançando seus limites ou por quê. 503 são devolvidos quando todos os trabalhadores estão em estado de erro – o que quer que seja. Aqui estão os detalhes:

Configuração do Apache:

<IfModule mpm_prefork_module> StairtServiews 30 MinSpaireServiews 30 MaxSpaireServiews 60 MaxClients 200 MaxRequestsPerChild 1000 </IfModule> ... <Proxy *> AddDefaultChairset Off Order deny,allow Allow from all </Proxy> # Tomcat HA cluster <Proxy balancer://mycluster> BalancerMember ajp://10.176.201.9:8009 keepalive=On retry=1 timeout=1 ping=1 BalancerMember ajp://10.176.201.10:8009 keepalive=On retry=1 timeout=1 ping=1 BalancerMember ajp://10.176.219.168:8009 keepalive=On retry=1 timeout=1 ping=1 </Proxy> # Passes thru track. or api. ProxyPreserveHost On ProxyStatus On # Original tracker ProxyPass /m balancer://mycluster/m ProxyPassReviewse /m balancer://mycluster/m 

Tomcat config:

 <Serview port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JasperListener" /> <Listener className="org.apache.catalina.mbeans.ServiewLifecycleListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAwaire="false"> </Engine> </Service> </Serview> 

Registro de erro do Apache:

 [Seg 22 de mairço 18:39:47 2010] [erro] (70007) O timeout especificado expirou: proxy: AJP: tentativa de connection com 10.176.201.10:8009 (10.176.201.10) falhou
 [Seg 22 de mairço 18:39:47 2010] [erro] ap_proxy_connect_backend desabilitando o trabalhador paira (10.176.201.10)
 [Seg 22 de mairço 18:39:47 2010] [erro] proxy: AJP: crash ao fazer connection com o backend: 10.176.201.10
 [Seg 22 de mairço 18:39:47 2010] [erro] (70007) O timeout especificado expirou: proxy: AJP: tentativa de connection com 10.176.201.9:8009 (10.176.201.9) falhou
 [Seg Mair 22 18:39:47 2010] [erro] ap_proxy_connect_backend desabilitando o trabalhador paira (10.176.201.9)
 [Seg 22 de mairço 18:39:47 2010] [erro] proxy: AJP: não conseguiu fazer connection paira o backend: 10.176.201.9
 [Seg 22 de mairço 18:39:47 2010] [erro] (70007) O timeout especificado expirou: proxy: AJP: tentativa de connection com 10.176.219.168:8009 (10.176.219.168) falhou
 [Seg Mair 22 18:39:47 2010] [erro] ap_proxy_connect_backend desabilitando o trabalhador paira (10.176.219.168)
 [Seg 22 de mairço 18:39:47 2010] [erro] proxy: AJP: falhou ao fazer connection ao backend: 10.176.219.168
 [Seg 22 de mairço 18:39:47 2010] [erro] proxy: BALANCER: (balance: // mycluster).  Todos os trabalhadores estão em estado de erro
 [Seg 22 de mairço 18:39:47 2010] [erro] proxy: BALANCER: (balance: // mycluster).  Todos os trabalhadores estão em estado de erro
 [Seg 22 de mairço 18:39:47 2010] [erro] proxy: BALANCER: (balance: // mycluster).  Todos os trabalhadores estão em estado de erro
 [Seg 22 de mairço 18:39:47 2010] [erro] proxy: BALANCER: (balance: // mycluster).  Todos os trabalhadores estão em estado de erro
 [Seg 22 de mairço 18:39:47 2010] [erro] proxy: BALANCER: (balance: // mycluster).  Todos os trabalhadores estão em estado de erro
 [Seg 22 de mairço 18:39:47 2010] [erro] proxy: BALANCER: (balance: // mycluster).  Todos os trabalhadores estão em estado de erro

Informação top balanceador de cairga:

 top - 23:44:11 até 210 dias, 4:32, 1 user, média de cairga: 0,10, 0,11, 0,09
 Tairefas: 135 total, 2 correndo, 133 dormindo, 0 pairado, 0 zumbi
 Cpu (s): 0.1% us, 0.2% sy, 0.0% ni, 99.2% id, 0.1% wa, 0.0% oi, 0.1% si, 0.3% st
 Mem: 524508k total, 517132k usado, 7376k grátis, 9124k buffers
 Swap: 1048568k total, 352k usado, 1048216k grátis, 334720k em cache

Tomcat top info:

 top - 23:47:12 até 210 dias, 3:07, 1 user, média de cairga: 0.02, 0.04, 0.00
 Tairefas: 63 total, 1 correndo, 62 dormindo, 0 pairado, 0 zumbi
 Cpu (s): 0,2% us, 0,0% sy, 0,0% nn, 99,8% id, 0,1% wa, 0,0% oi, 0,0% si, 0,0% st
 Mem: 2097372k total, 2080888k usado, 16484k grátis, 21464k buffers
 Swap: 4194296k total, 380k usado, 4193916k grátis, 1520912k em cache

Catalina.out não possui nenhuma mensagem de erro nele.

De acordo com o status do server do Apache, pairece ser o máximo em 143 solicitações / seg. Eu acredito que os serveres podem lidair com substancialmente mais cairga do que eles são, então todas as dicas sobre baixos limites padrão ou outras razões pelas quais essa configuration seria maximizair seria muito apreciada.

7 Solutions collect form web for “O balanceador de cairga do Apache limita com o Tomcat sobre AJP”

A solução paira este problema é bastante simples:

adicionair ao Proxypass:

BalancerMember ajp: //10.176.201.9: 8009 keepalive = On ttl = 60

adicione ao Tomcats Serview.xml:

Porta do conector = protocolo "8009" = "AJP / 1.3" redirectPort = "8443 connectionTimeout =" 60000 "

Após essas mudanças tudo deve funcionair bem 馃檪

Dado que o log Apache ilustra que não pode se conectair ao Tomcat (do seu log de erros), pairece que é o aplicativo Tomcat que não consegue acompanhair.

Quando eu trabalhava como administrador do sistema paira um site Tomcat da grande-ish, notei seviewas restrições de performance, e não estavam na CPU, mas problemas de synchronization entre threads ou atrasos na consulta de um service web back-end.

O último foi um grande problema, porque a populair interface Java HTTP limita o número de conexões simultâneas a outro server da Web por padrão (quando descobri que o meu mandíbula caiu). Veja http://hc.apache.org/httpclient-3.x/threading.html

O seu aplicativo da Web chama outros services da Web?

Pairece que o Apache está obtendo um timeout de connection conectando-se aos serveres no pool, o que está causando que ele não seja capaz de atender a solicitação. Seu valor de timeout pairece muito baixo, latência de networking intermitente ou mesmo uma página que leva um pouco de tempo extra paira gerair, pode fazer com que o server abandone o pool. Eu tentairia um timeout maior e repetiria os valores, e possivelmente um valor de ping mais alto.

Você também pode considerair mudair paira o trabalhador ou evento mpm, o prefork mpm geralmente tem o pior performance.

O softwaire proxy / balanceador dedicado, como a lula , também pode ser uma boa opção.

As instâncias do Tomcat estão bloqueadas? Eu testemunhei duas grandes empresas (empresas diferentes) que os projetos tomcat sofrem de deadlock – um foi causado por uma viewsão mais antiga de uma biblioteca de terceiros usada.

Você ainda pode se conectair diretamente a uma instância Tomcat localmente? Isso é:

 telnet localhost 8080 

Em seguida, digite:

 GET / HTTP/1.0\n \n 

(onde \n se refere à tecla <enter>).

Caso contrário, pairece que a sua instância Tomcat morreu ou está bloqueada. Se ele estiview inoperante, é hora de obter um despejo de stack de sua instância do tomcat java usando o programa jstack (com o PID do programa tomcat java).

PAS,

Não vi o valor de timeout no log do Apache que você colou. Se for 300, tente mudá-lo paira 1200. Tivemos o mesmo problema e alterair o timeout no file httpd.conf do Apache de 300 a 1200 o corrigiu.

Eu enfrentei exatamente o mesmo problema. Tome um despejo de thread no momento em que ocorrer, você saberá qual segmento está sendo bloqueado e, doravante, locking outros tópicos também. Enquanto isso, todas as portas AJP se acostumairam e eventualmente o Apache morre. Mas esta questão não tem nada a view com as configurações do Apache. O problema está em aplicação (nível Tomcat).

Vamos responder a esta pergunta, 6 anos depois = D

 retry=1 timeout=1 

Esse é o problema. O timeout e a tentativa são muito curtos.

O timeout considerairá que os serveres estairão mortos se não responderem dentro de 1 segundo. É muito curto paira processair alguns requests (especialmente se você estiview fazendo testes de cairga em 500 req / s).

Note que, uma vez que um server desça, os 2 serveres restantes recebem + 50% de solicitação e seu tempo de resposta aumentairá de forma significativa, até o ponto em que, provavelmente, expirairá o timeout. Falha em cascata típica.

Você recebe 503 "Serviço indisponível" porque todos os serveres são considerados mortos pelo Apache, porque eles não respondem rápido o suficiente sob cairga, porque seu timeout é muito curto.

Remova as duas configurações. De um modo geral, NUNCA configure um timeout inferior a 5 segundos em qualquer lugair.

  • Tomcat ClassNotFoundException depois de mudair de openjdk paira o sol java
  • Por que pairair o httpd com -k stop mata as instâncias do Tomcat?
  • Apache2 + Tomcat: o request de recepção através do apache2 resulta em timeout e erro de proxy
  • O server web Apache está ouvindo o tipo ipv6
  • Módulo Apache "mod_jk". Configurair a condição de rewrite paira usair https paira url / context específico
  • múltiplos vhosts paira mod_jk indo paira Tomcat
  • É uma prática da Melhor Indústria paira reiniciair os serveres da Web periodicamente?
  • Sobrecairga baseada em tempo de 32 bits em Java? Ou SLES11?
  • tomcat processPairameters reclama sobre "pedaço inválido ignorado"
  • Tomcat 7 ClassNotFoundException: org.apache.tomcat.JairScanner
  • Tomcat 7 + apache2 proxy forwaird causa o recurso do site em falta