| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 08:05:40
|
Ezequielll
Entusiasta Java
![[Avatar]](/images/avatar/aaa82b904f73289f6e5e0f4b11b76e3d.png)
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 08:35:32
|
barenko
JavaBaby
![[Avatar]](/images/avatar/4c32ad344b09ff872f942b6d2196e720.jpg)
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?)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 09:37:02
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 13:10:00
|
Ezequielll
Entusiasta Java
![[Avatar]](/images/avatar/aaa82b904f73289f6e5e0f4b11b76e3d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 13:14:25
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/03/2010 13:55:52
|
Ezequielll
Entusiasta Java
![[Avatar]](/images/avatar/aaa82b904f73289f6e5e0f4b11b76e3d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/03/2010 08:49:19
|
barenko
JavaBaby
![[Avatar]](/images/avatar/4c32ad344b09ff872f942b6d2196e720.jpg)
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/03/2010 09:09:38
|
lina
Moderador
![[Avatar]](/images/avatar/8849f0a976aa5332853e848655a1d28f.jpg)
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! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/03/2010 09:41:56
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
|
|
 |
|
|