Programa(thread) fica no estado waiting?  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Ezequielll
Entusiasta Java
[Avatar]

Membro desde: 16/01/2010 12:57:29
Mensagens: 20
Offline

Primeiro quero ressaltar que minha situação não é nada trivial. A situação é a seguinte:
Tenho um programa que inicializa algumas threads para executar uma série de instruções. Assim que elas terminam, as threads morrem, aguarda-se uns 5 minutos e depois começa tudo de novo. Até aí, tudo bem. Só que depois de umas 12 horas, as threads entram em estado de waiting. Tempos a atrás isso significava que algumas conexões JDBC ficavam abertas, e quando chegam em um certo número, a thread ficava em tal estado. Só que na situação atual, já verifiquei se existem conexões abertas, e nada, logo gostaria de saber se alguém tem alguma sugestão o que poderiam levar a esse estado de waiting.


Desde já agradeço a ajuda de todos

This message was edited 1 time. Last update was at 12/03/2010 08:06:41


Cientista da Computação - SCJP 1.5
barenko
JavaBaby
[Avatar]

Membro desde: 07/04/2008 21:09:30
Mensagens: 81
Offline

Vixi cara, existem tantas situações p/ isso q daria p/ escrever livros sobre o assunto...

Vc já fez profile do processo?
As threads compartilham recursos entre si? Se sim, as classes compartilhadas são REALMENTE threadsafe? [mais provável]
Há chances de dispositivos I/O estarem travando o processo? (ex: leitura/escrita de arquivos, acesso jdbc, etc) [menos provável]


A possibilidade maior q eu vejo é q existe algum caso bem específico causando deadlock entre elas...

O d daria p/ fazer tb é logar as classes e threads envolvidas e qdo der o problema, ir no log e refazer mentalmente o processo das threads (é um saco, mas fazer o q?)
[Email]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20584
Localização: Curitiba/PR
Online

Rode seu programa com o console aberto. Quando tudo ficar em waiting, aperte CTRL+Break. Verifique se lá algum deadlock foi detectado.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Ezequielll
Entusiasta Java
[Avatar]

Membro desde: 16/01/2010 12:57:29
Mensagens: 20
Offline

ViniGodoy, rodar o programa em debug no meu caso, não é viável tento em vista que ele demora em torno de 12 horas para entrar em estado de waiting. Talvez seja melhor mesmo acompanhar os logs.

Barenko, as threads não compartilham recursos entre si, não existem nem métodos e variaveis em comum. Logo não existe a necessidade de serem threadsafe.
Agora você levantou duas questões interessantes, que gostaria que explicasse, se possível, é claro.
A primeira é: como faz profile do processo? Talvez faço isso e não sei que recebe esse nome... rs
A segunda é: como sei que dispositivos I/O estão travando o processo? Tem algum teste com resultado rápido, que posso fazer isso?


Cientista da Computação - SCJP 1.5
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20584
Localização: Curitiba/PR
Online

Ezequielll wrote:A primeira é: como faz profile do processo? Talvez faço isso e não sei que recebe esse nome... rs

Use o visual VM. Em modo debug, se você usar o profiler do Netbeans, é possível até mesmo dar um "pause" na thread e ver em que ponto ela está parada. Se o programa leva só 12 horas para travar, deixe-o rodando por uma noite e na manhã seguinte vc terá o resultado.

Ezequielll wrote:A segunda é: como sei que dispositivos I/O estão travando o processo? Tem algum teste com resultado rápido, que posso fazer isso?


Você usa que tipos de dispositivos de I/O? Disco? Sockets?

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Ezequielll
Entusiasta Java
[Avatar]

Membro desde: 16/01/2010 12:57:29
Mensagens: 20
Offline

ViniGodoy, sobre o visual VM nem tinha conhecimento, vou estudá-lo e testá-lo.
Agora, sobre os dispositivos de I/O não sei te falar direito, pois estou na manutenção de um grande projeto...
sei que usa JDBC para salvar os dados no banco e as vezes usa java.io.FileInputStream e java.io.InputStream. Logo gostaria de saber o que devo olhar para saber o tipo de dispositivo I/O utilizado?

Cientista da Computação - SCJP 1.5
barenko
JavaBaby
[Avatar]

Membro desde: 07/04/2008 21:09:30
Mensagens: 81
Offline

Profilers:
No netbeans, tem o profile nativo. Se vc usa eclipse, basta instalar o TPTP q são fornecidas qse as mesmas características (se puder escolher, teste no netbeans, pois o profiler dele é bem mais leve e muito melhor).

Eu não conhecia esse visualVM, interessante, vou dar uma olhada.
[Email]
lina
Moderador
[Avatar]

Membro desde: 23/12/2006 21:05:04
Mensagens: 3083
Offline

Oi,

Está cheirando JavaHeap - OutOfMemory. Quem sabe algum objeto está ficando "armazenado" virtualmente e o GC não está resolvendo.

Acompanhe com o Visual VM e coloque um GC na saida (após o wait) de sua Thread. Verifique se o Heap irá normalizar quando você forçar a utilização do System.gc();

Tchauzin!



Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
http://www.guj.com.br/posts/list/50115.java

Se o seu tópico foi respondido e você está satisfeito, segue:
- Pressione o botão <Edit> de seu primeiro post
- Acrescente no final do título a tag [RESOLVIDO]

@gujgirl

http://www.restartfans.hdfree.com.br

Meu blog:

http://www.runthecode.wordpress.com

Tchauzin!
[Email]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20584
Localização: Curitiba/PR
Online

barenko wrote:Eu não conhecia esse visualVM, interessante, vou dar uma olhada.


É muito parecido com o profiler do Netbeans. A grande vantagem é que ele já vem no JDK 6.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team