Identificar travamento aplicação

2 respostas
P

Boa tarde!!!

Preciso de umas idéias… O meu problema é o seguinte: tenho uma chamada à uma biblioteca que executa um serviço de conversão de documento. Está funcionando até um determinado momento, quando trava e eu perco o controle da aplicação.

Eu preciso identificar que o processamento parou e reiniciá-lo, porém não posso mexer no código fonte da biblioteca que uso… Alguma idéia?

Muito obrigada!

2 Respostas

G

Olá, se o problema for deadlock(uma thread esperando pra usar um recurso que a outra possui e segurando um que a outra quer) acho que o jconsole é suficiente, ele já vem junto com o Java SE 5 e 6, no java 6 é só digitar jconsole no prompt e conectar à sua aplicação, então vc procura nas abas lá que logo vai encontrar a detecção de deadlock.

No java 5, vc tem que rodar sua aplicação com o comando “java -Dcom.sun.management.jmxremote …”, nas … vai o que vc usaria normalmente. Não tenho certeza quanto a isso, se precisar usar isso dá uma pesquisada ou pergunta aqui que eu olho melhor.

Caso o seu problema seja loop infinito, que acho que é o mais comum, acho que o Glassbox pode te ajudar, não testei ele mas pelo que li parece realmente muito bom, só não tenho certeza se ele não é só pra aplicações web…

Caso ele não sirva, tem ferramentas que vem com o java que podem de ajudar de um jeito muito mais trabalhoso :razz: mas nao lembro o nome, teria que dar uma pesquisada denovo…

E, finalmente, se vc precisa fazer um programa que faça esse gerenciamento, acho que precisará utilizar a JMX, eu posso te ajudar nisso mas só terei tempo a partir de quinta feira, se for o caso fale aí :grin:

P

Olá Gustavo_Paulo!

Muito obrigada pelas dicas.

No momento eu estou tentando usar Thread pra controlar a execução da minha aplicação… Tem como identificar que a Thread está parada em alguma linha de execução a muito tempo? É isso que está acontecendo na minha aplicação… A execução fica parada na linha que chama o serviço de conversão do Open Office.

Pois bem, mesmo que eu não consiga identificar pela Thread que o processamento parou, consigo fazer isso de uma maneira pouco adaquada porém funcional. Mas tenho outro problema… tento ‘matar’ a Thread e iniciar uma nova, porém aparentemente o serviço do Open Office não cai.

Por exemplo: se no processamento normal eu identificar o travamento, fechar minha aplicação e executá-la novamente, dá tudo certo até que trava novamente. Mas eu eu tentar o esquema que falei com a Thread, na hora de starta-la dá erro de conexão com o Open Office.

Tenho o seguinte código dentro de um loop de verificação (travamento e finalização):

conversor.interrupt();
conversor = null;
Thread.sleep(60000);
conversor = new ConversorPDFThread(arg);
conversor.start();

Tentei inclusive ‘dar um tempo’ para o serviço, na esperança de ele fechar, mas não funcionou.

Alguma dica??

Obrigadão

Criado 16 de novembro de 2007
Ultima resposta 20 de nov. de 2007
Respostas 2
Participantes 2