Tempos de resposta longos e intermitentes ao baixar documentos

1

Eu tenho um aplicativo da Web Java executando o Tomcat 7 com um Apache httpd 2.2 na frente com o mod_jk / AJP.

Uma parte do aplicativo está servindo arquivos (até o tamanho de 4 MB). Agora, normalmente tudo isso funciona muito bem com tempos de resposta estáveis e baixos. No entanto, em casos raros (< 0,1% dos downloads), o tempo de download ultrapassará 1 minuto. Depois de ativar o ThreadStuckValve no Tomcat, posso ver que as respostas longas parecem estar presas em

org.apache.tomcat.jni.Socket.sendbb(Native method)

ou seja, E / S de rede. No máximo, esses downloads de longa duração levam 5 minutos, o que eu suspeito strongmente que seja devido ao tempo limite padrão de 300 segundos no Apache 2.2 ( link ," diretiva TimeOut ").

Para mim, isso parece com problemas de rede. O tempo limite do Apache (se é isso que está chutando na marca de 5 minutos) indica que os pacotes ACK não estão sendo transmitidos corretamente. Minhas perguntas são o que poderia estar causando isso? O navegador fechado na extremidade de recepção, mas o soquete não sinalizou como fechado corretamente? Perda de pacotes ou alguma outra falha de rede em trânsito? Onde eu começaria a solucionar isso?

Estamos executando o Tomcat e o Apache no Windows server 2008-R2 em um servidor virtualizado VMware.

    
por pap 05.04.2012 / 10:51

1 resposta

1

Eu começaria executando o Wireshark e confirmando sua teoria de que os clientes estão se comportando mal. Se for esse o caso, não há muito que você possa fazer para impedir isso, mas você pode adicionar inteligência para fechar essas conexões do seu lado de forma mais agressiva (tanto no Tomcat quanto no Apache).

Também é importante notar que, se esse tipo de mau comportamento tiver impacto significativo em seu aplicativo, você estará suscetível a alguns vetores simples de ataque DoS ( O Slowloris vem à mente como uma possibilidade, embora algo que vá até o seu aplicativo e desapareça seja mais eficaz).

    
por 05.04.2012 / 12:36