Java: Tomcat lento servindo arquivos estáticos?

5

Estou executando uma instância do Apache Tomcat (5.5) em uma plataforma Windows 2008. Acho que estou vendo um problema relacionado ao acesso / bloqueio de arquivos simultâneos.

Quando o número de encadeamentos HTTP simultâneos é aumentado além da configuração padrão (150), vejo (usando uma ferramenta de monitoramento de sites) um número crescente de atrasos "não naturais" ao exibir conteúdo estático (.js .gif .png etc. ). Com isso, quero dizer que o servidor demora 20 segundos mais antes de começar a enviar ou levar 30 segundos para atender a um pequeno arquivo (2KiB).

Quando o Tomcat está ocupado (atendendo a mais de 300 threads), o uso da CPU fica em torno de 50-60% e o uso do disco está em torno de 10 a 30mbps.

Existe alguma ferramenta que eu possa usar para Java para determinar se é esse o caso? A biblioteca nativa de APR / Apache do Tomcat poderia resolver isso?

Alternativamente, há algo mais que eu deveria estar investigando?

Captura de tela da ferramenta de análise de site:

    
por Michael 07.03.2011 / 17:47

2 respostas

4

O Tomcat 7 suporta a exibição de arquivos estáticos fora do WAR. Veja aqui (ponto 4.) Já experimentou?

Você pode confirmar que é o Tomcat que gera esse atraso (por exemplo, usando o log de acesso do Tomcat)? Não deve ser difícil correlacionar o arquivo baixado lentamente com a entrada no log de acesso no lado do servidor.

O que os encadeamentos HTTP estão fazendo durante o teste? Seria incrível despejar rastros de pilha quando esse fenômeno acontece. Se você perceber que algum recurso demora muito tempo para fazer o download, basta executar o dump e localizar o encadeamento culpado (com o registro de acesso sintonizado, você pode imprimir o nome do encadeamento).

    
por 07.03.2011 / 18:53
2

Ter um servidor da web apache antes do tomcat e exibir imagens e js a partir dele. Encaminhe o restante do tráfego para o tomcat por meio de configurações de proxy ou ajp.

    
por 07.03.2011 / 17:55

Tags