| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2010 13:03:03
|
fsfnit
Java Ninja
![[Avatar]](/images/avatar/83a703361336ec7c6f2efcd4f4a44206.jpg)
Membro desde: 16/05/2006 13:38:27
Mensagens: 283
Localização: Far Far Away - Niterói / RJ
Offline
|
Bom pessoal, tenho uma aplicação, que recebe requisições de outras. Utilizo muito a API Collections, com threads e talz.
Noto que ao receber requisições, o consumo da RAM vai aumentando e nunca desce.
Tem algum modo ou alguma ferramenta para ajudar a analisar e apontar onde possa estar o problema, indicando qual o objeto está se matendo "eterno" na memória ?
Um ThreadDump serveria ?
Valew.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2010 13:18:03
|
Tchello
GUJ Master
![[Avatar]](/images/avatar/901db33c84e81b1a30e59949bbcb112b.png)
Membro desde: 07/06/2008 14:41:04
Mensagens: 1694
Offline
|
O que você precisa é de um profiler.
Há vários disponíveis, inclusive um que vem, se não me engano, com o update 14 da jdk 1.6.
Nele você pode analisar onde está sendo consumido memória e processamento em tempo de execução, daí você pode identificar os leaks e analisa-los mais pontualmente, do que partir do zero.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2010 13:21:07
|
Carlos_ds_jar
Virtual Machine Man
![[Avatar]](/images/avatar/6289deccda230bf7fe2733a9f943a66e.jpg)
Membro desde: 27/01/2007 15:38:24
Mensagens: 540
Localização: Ceará e Paraíba
Offline
|
fsfnit wrote:Bom pessoal, tenho uma aplicação, que recebe requisições de outras. Utilizo muito a API Collections, com threads e talz.
Noto que ao receber requisições, o consumo da RAM vai aumentando e nunca desce.
Tem algum modo ou alguma ferramenta para ajudar a analisar e apontar onde possa estar o problema, indicando qual o objeto está se matendo "eterno" na memória ?
Um ThreadDump serveria ?
Valew.
O NetBeans tem um monitor de objetos muito bom, não me lembro direito o nome mas dê uma olhada que tem...
|
"O Java é capaz de gerar mais soluções e mais problemas do que a nossa 'vã' filosofia é capaz de prever!" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2010 13:25:55
|
fsfnit
Java Ninja
![[Avatar]](/images/avatar/83a703361336ec7c6f2efcd4f4a44206.jpg)
Membro desde: 16/05/2006 13:38:27
Mensagens: 283
Localização: Far Far Away - Niterói / RJ
Offline
|
Carlos_ds_jar wrote:
fsfnit wrote:Bom pessoal, tenho uma aplicação, que recebe requisições de outras. Utilizo muito a API Collections, com threads e talz.
Noto que ao receber requisições, o consumo da RAM vai aumentando e nunca desce.
Tem algum modo ou alguma ferramenta para ajudar a analisar e apontar onde possa estar o problema, indicando qual o objeto está se matendo "eterno" na memória ?
Um ThreadDump serveria ?
Valew.
O NetBeans tem um monitor de objetos muito bom, não me lembro direito o nome mas dê uma olhada que tem...
Pois é, com o netbeans era moleza, mas estou usando o eclipse, e só conheço esses profilers pagos.
Mas vou varrer a net aqui, qq coisa que eu achar e testar, posto aqui para a comunidade.
Vlw.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2010 13:29:17
|
Tchello
GUJ Master
![[Avatar]](/images/avatar/901db33c84e81b1a30e59949bbcb112b.png)
Membro desde: 07/06/2008 14:41:04
Mensagens: 1694
Offline
|
Procure pelo visualvm.
Vem junto da jdk 1.6, se não me engano fica no [JAVA_HOME]/lib/visualvm
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2010 13:34:56
|
fsfnit
Java Ninja
![[Avatar]](/images/avatar/83a703361336ec7c6f2efcd4f4a44206.jpg)
Membro desde: 16/05/2006 13:38:27
Mensagens: 283
Localização: Far Far Away - Niterói / RJ
Offline
|
Tchello wrote: Procure pelo visualvm.
Vem junto da jdk 1.6, se não me engano fica no [JAVA_HOME]/lib/visualvm
Vou dar uma estudada nele aqui.
Vlw.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2010 13:40:39
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Use mesmo o visual vm: https://visualvm.dev.java.net/
|
@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) 26/07/2010 14:13:21
|
LucianoM86
JavaChild
![[Avatar]](/images/avatar/864dc00769bd71798c589f363eb7d222.png)
Membro desde: 02/09/2006 19:27:37
Mensagens: 120
Localização: Campinas, SP
Offline
|
Se seu HEAP estiver muito grande e você não estiver conseguindo analisar com o profiler, tire um dump do heap com o jmap (vem junto com o JDK) e depois analise com o MAT (http://www.eclipse.org/mat/)
|
OCJP, OCWCD, OCBCD e OCMJEA
Twitter: LucMolinari
http://lucianomolinari.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2010 14:23:44
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Você não precisa do JMap para gerar o heap dump. Basta adicionar o seguinte flag na linha de execução da VM: -XX:+HeapDumpOnOutOfMemoryError Deixe o erro ocorrer e o heap ficará gravado no mesmo diretório da sua aplicação.  Se precisar gerar um heap dump num momento específico, você pode usar também a flag: -XX:+HeapDumpOnCtrlBreak Aí, basta ir até o console do java e pressionar CTRL+Break para o heap ser gerado. Se quiser especificar o caminho do heap dump, use a opção: -XX:HeapDumpPath=file Exemplo: java -jar SeuJar.jar -XX:+HeapDumpOnOutOfMemoryError Mais informações: http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/clopts.html#gbzrr
This message was edited 1 time. Last update was at 26/07/2010 14:25:30
|
@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) 26/07/2010 15:42:25
|
LucianoM86
JavaChild
![[Avatar]](/images/avatar/864dc00769bd71798c589f363eb7d222.png)
Membro desde: 02/09/2006 19:27:37
Mensagens: 120
Localização: Campinas, SP
Offline
|
ViniGodoy, mas a opção -XX:+HeapDumpOnCtrlBreak também funciona se o processo estiver rodando em background e só for possível matar com kill (ambiente Linux)?
This message was edited 1 time. Last update was at 26/07/2010 15:43:01
|
OCJP, OCWCD, OCBCD e OCMJEA
Twitter: LucMolinari
http://lucianomolinari.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2010 16:13:42
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
LucianoM86 wrote:ViniGodoy, mas a opção -XX:+HeapDumpOnCtrlBreak também funciona se o processo estiver rodando em background e só for possível matar com kill (ambiente Linux)?
Não, isso só funciona com o console mesmo. Para esse caso, aí sim, você usa o JMap.
De qualquer forma, eu prefiro é deixar o parâmetro do dump on outofmemory. Isso pq a VM tira o dump no exato momento que o erro ocorre, antes de limpar toda memória. Não tem como ter dump mais preciso que esse.
|
@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) 26/07/2010 16:28:52
|
LucianoM86
JavaChild
![[Avatar]](/images/avatar/864dc00769bd71798c589f363eb7d222.png)
Membro desde: 02/09/2006 19:27:37
Mensagens: 120
Localização: Campinas, SP
Offline
|
haha, com certeza!
Mas o JMap é util em situações mais específicas. Estava com um problema em que o heap chegava em um valor alto (próximo do máximo), mas não causava OutOfMemoryError. Nesse ponto, a aplicação ficava uma carroça, pois não parava de passar GC e não conseguia liberar memória. Ai o JMap me salvou!
|
OCJP, OCWCD, OCBCD e OCMJEA
Twitter: LucMolinari
http://lucianomolinari.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2010 17:18:25
|
fsfnit
Java Ninja
![[Avatar]](/images/avatar/83a703361336ec7c6f2efcd4f4a44206.jpg)
Membro desde: 16/05/2006 13:38:27
Mensagens: 283
Localização: Far Far Away - Niterói / RJ
Offline
|
Pois é galera, estava com problemas aqui e não consegui botar para rodar o visualVM.
Assim que botar para rodar falo para vocês se consegui atingir o objetivo que é descobrir o que está comendo a memória.
Agradeço desde já a todos os amigos que estão tentando me ajudar.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2010 10:44:15
|
fsfnit
Java Ninja
![[Avatar]](/images/avatar/83a703361336ec7c6f2efcd4f4a44206.jpg)
Membro desde: 16/05/2006 13:38:27
Mensagens: 283
Localização: Far Far Away - Niterói / RJ
Offline
|
Bom pessoal,
Abri o VisualVM, rodei a minha aplicação e fiz o profiler.
Ai o VisualVM me relatou que estou consumindo muita memória com objetos Strings, Char, e outras primitivas da API QuickFix.
Agora, como faço para saber onde a minha aplicação está consumindo tais objetos e primitivas para que eu possar saber onde atacar ?
Obrigado.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2010 10:48:09
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Você precisa agora usar sua cabeça.
Você pode ir desativando módulos da sua aplicação, um de cada vez, até descobrir qual deles, quando funciona, consome mais memória.
|
|
|
 |
|
|