Um aplicativo de banco de dados desatualizado pode travar o tomcat?

2

Temos vários serviços da Web sendo executados no Tomcat que usam o hibernate / mysql. Eu suspeito que alguns deles configuraram incorretamente os pools de conexão, pois após várias horas alguns dos aplicativos individuais ficam sem conexões e param de responder. Fizemos alterações no serviço do conjunto de conexões (nesse caso, C3P0), mas ainda precisamos deixar as versões antigas dos aplicativos no servidor para compatibilidade com versões anteriores.

De qualquer forma, eu suspeito que esses aplicativos também estejam prejudicando a estabilidade geral do tomcat. Cerca de uma vez por semana, nosso servidor pára de responder totalmente e não consegue atender a páginas estáticas. Depois de reiniciar o serviço, tudo funciona novamente por mais alguns dias. Examinar os logs quase não mostra exceções, por isso não sei o que estaria causando o crash do tomcat. Nada de notável está listado nos logs de erro antes que o servidor pare de responder, infelizmente.

Também estamos pensando em migrar para o JBoss, já que é um pouco mais "enterprisey", mas não estou convencido de que isso resolverá esses problemas. Existe alguma razão convincente para mudar de plataforma web, ou devo depurar ainda mais dentro de nossas próprias aplicações web? Além disso, é possível que o webapp trava o servidor de aplicativos fazendo algo ruim?

Configuração do servidor: Windows 2003 Server, Tomcat 6.0.18 + blazeDS 3.0, Hibernate 3.2.

    
por Nik Reiman 17.05.2009 / 18:11

4 respostas

2

Eu não acho que alguém terá a resposta para o seu problema, mas apenas leva & idéias. Aqui estão alguns:

  • você precisa de robôs que verificarão a integridade de cada parte do seu serviço . (testando uma única conexão ao seu banco de dados, obtendo uma página web estática, obtendo uma página web dinâmica ...). Dessa forma, você verá o que as quebras primeiro ou o aumento do tempo de resposta.

  • você tem um monitoramento / serviço de estatísticas ? Você precisa acompanhar o "número de conexões de banco de dados ativas", "número de sessões da web ativas", "número de threads do tomcat", "memória disponível", CPU ...

Meu conselho, não há nenhum processo tomcat porque eles estão todos presos à espera de um recurso (talvez uma conexão de banco de dados, ou eles são apenas um loop infinito!). As ferramentas que listei anteriormente irão ajudá-lo a entender por que seu servidor está morrendo lentamente toda semana.

  1. execute netstat em seu servidor e observe o número de conexões com o servidor de banco de dados (e verifique-o em relação ao tamanho do seu pool e à capacidade do servidor de banco de dados).
  2. execute o jstack no seu servidor de aplicativos e corte / grep / classifique-os para ver o que seus threads estão fazendo.
por 17.05.2009 / 22:39
1

Se a exibição das páginas estáticas não requer acesso ao banco de dados, parece improvável que seja um problema de recurso de banco de dados. Pode ser que todos os encadeamentos agrupados estejam presos em algum lugar, como a espera pela unidade do banco de dados ou em um deadlock. A primeira coisa que faço é obter um instantâneo dos rastreamentos de pilha com jstack . Você pode analisar ainda mais o processo com visualvm ou jconsole .

    
por 17.05.2009 / 22:29
1

Só queria acrescentar que é bastante comum que os problemas de bloqueio de tabela com tabelas MyISAM possam facilmente fazer com que as conexões de banco de dados se acumulem e fazer com que o aplicativo aguarde que esses resultados sejam colocados e assentados.

Você pode querer verificar a lista de processos do MySQL para ver se há muitas consultas em um estado bloqueado.

# mysqladmin processlist

- ou -

mysql> show processlist;

Se o bloqueio for o problema, você vai querer ver se a mudança do mecanismo de armazenamento nas tabelas de problemas do MyISAM para o InnoDB é viável.

    
por 17.05.2009 / 22:36
1

Se você instalar o webapp sonda lambda (obtenha a versão beta 1.7), poderá obter o monitoramento no nível de thread; manter-se atento a isso o avisará quando os encadeamentos estiverem aguardando o banco de dados, bem como uma série de outros diagnósticos úteis.

É um pouco antigo, mas ainda funciona bem em versões recentes do tomcat.

    
por 18.05.2009 / 03:00