Por que o Tomcat 5.5 (com Java 1.4, rodando no Windows XP de 32 bits) trava repentinamente?

StackOverflow https://stackoverflow.com/questions/66104

  •  09-06-2019
  •  | 
  •  

Pergunta

Estou executando o Tomcat 5.5 com Java 1.4 há algum tempo com um webapp enorme.Na maioria das vezes ele funciona bem, mas às vezes ele simplesmente trava, sem nenhuma exceção gerada e nenhuma maneira aparente de fazê-lo funcionar novamente a não ser reiniciar o Tomcat.A instância do Tomcat pode ter um gigabyte de memória no heap, mas raramente excede 300 MB.Alguém mais se deparou com esse problema e há uma solução para isso?

Para esclarecimentos:Eu determinei quanta memória ele está usando por meio do Gerenciador de Tarefas e do Eclipse (também tentei executá-lo fora do Eclipse, mas eventualmente tive o mesmo problema, embora demore um pouco mais).Com o Eclipse, observo a memória alocada por meio de seu pequeno painel de memória (opcional) e a quantidade alocada para javaw.exe por meio do gerenciador de tarefas.Eu uso o sysdeo?Plug-in Tomcat para Eclipse.

Foi útil?

Solução

Para qualquer processo jvm, force um despejo de thread.No Windows, isso pode ser feito com CTRL-BREAK, acredito, na janela do console.

No *nix, quase sempre é "kill -3 jvm-pid".

Isso pode mostrar se você tem threads aguardando no pool de conexão do banco de dados/pool de threads, etc.

Outra coisa a verificar é quantas conexões você tem atualmente com a JVM - use o utilitário NETSTAT ou SysInternals, como tcpconn/tcpview (google).

Além disso, tente executar com o sinalizador JVM verbose:gc.Para JVM da Sun, execute como "java -verbose:gc".Isso mostrará suas coletas de lixo.Se estiver coletando muito (COLEÇÕES COMPLETAS, especialmente), provavelmente você terá um vazamento de memória.As coleções completas são caras, especialmente em grandes pilhas como essa.

Como você está determinando que apenas 300 MB estão sendo usados?

Outras dicas

Parece que você está chegando a um impasse.

Se você puder reproduzi-lo em um ambiente de desenvolvimento, tente anexar um depurador assim que isso acontecer.Dê uma olhada em seus tópicos e veja se você tem algum impasse.

Se você não conseguir conectar um depurador, poderá gerar um dump de thread, como Dustin apontou.

Tente aumentar a sensibilidade do log para o servidor de aplicativos Tomcat.http://tomcat.apache.org/tomcat-5.5-doc/logging.html

Você pode aumentar a sensibilidade para FINEST ou ALL para a maioria deles por alguns dias e ver se isso ajuda a detectar alguma coisa.

Concordo em criar vários dumps de thread e visualizá-los desta forma: Analisador de despejo de thread

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top