The dreaded permgen problem  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
ViniGodoy
Moderador
[Avatar]

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

Recentemente comecei a receber o erro "OutOfMemoryError - PermGen space". Não se trata de um OutOfMemory error comum. Como o final da mensagem diz ocorre no "PermGen space", que é o local onde os classloaders são criados.

Embora o problema seja mais comum nos applications servers, ele também pode ocorrer para aqueles que, como eu, usam linguagens de script. Buscando na net, achei dois ótimos artigos que falam a respeito do assunto, e recomendo a todos aqueles que trabalham com web, ou manipulam vários classloaders a leitura.

O primeiro deles, fala a respeito do problema, exemplifica como e porque ele ocorre, e também mostra porque ele é um problema sutil. O segundo, já dá uma luz sobre como identificar os possíveis pontos de falha no código.

http://blogs.sun.com/fkieviet/entry/classloader_leaks_the_dreaded_java
http://blogs.sun.com/fkieviet/entry/how_to_fix_the_dreaded

Outros artigos legal sobre o assunto é:
http://cyriltech.blogspot.com/2010/08/understanding-permgen-errors.html

Alguém aqui já passou pelo mesmo problema?


Uma dica, no lugar do aplicativo indicado pelos artigos, você pode usar o Netbeans profiler para identificar o Permgen. A interface é mais limpa, mais rápida e mais fácil de usar.

This message was edited 6 times. Last update was at 14/07/2011 10:02:10


@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]
fnandos
JavaEvangelist
[Avatar]

Membro desde: 18/02/2008 10:57:42
Mensagens: 317
Localização: Santa Catarina
Offline

O TomCat tem muito disso, geralmente eu reinicio ele e pronto.

Quando saci entra na briga todo chute vira voadora!
ViniGodoy
Moderador
[Avatar]

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

fnandos wrote:O TomCat tem muito disso, geralmente eu reinicio ele e pronto.


É melhor entender o problema do que contorna-lo, sem corrigir...

No caso, a minha aplicação é que faz as vias do TomCat, mas rodando scripts Groovy do meu usuário.

@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]
Rafael Nunes
Moderador
[Avatar]

Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline

Eu ja tive isso com o Jboss4.0.5, o problema era com a lib do jboss-groups. Como temos contrato com a Red Hat aqui, nos enviaram uma lib corrigida.

------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."

http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
[Email]
brunolinsalves
JavaChild

Membro desde: 23/11/2007 09:14:21
Mensagens: 102
Offline

Ótimo post!
Me ajudou bastante...

vlw!

Sun Certified Java Programmer 5.0
Felagund
GUJ Master
[Avatar]

Membro desde: 26/07/2006 11:51:36
Mensagens: 1732
Localização: Santa e Bela Catarina
Offline

Viny vc é o cara, nossa, como tava me batendo pra resolve isso, esses topicos ajudaram bastante, pra quem não conseguiu, seta a variavel de ambienta JAVA_OPTS, que o tomcat usa

por exemplo


abraços a todos

att
Rafael Felix

Rolling With Code
Twitter
[WWW]
Rafael Nunes
Moderador
[Avatar]

Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline

Felagund wrote:Viny vc é o cara, nossa, como tava me batendo pra resolve isso, esses topicos ajudaram bastante, pra quem não conseguiu, seta a variavel de ambienta JAVA_OPTS, que o tomcat usa

por exemplo


abraços a todos


Você não tá resolvendo o problema deste jeito, só adiando.

------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."

http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
[Email]
ViniGodoy
Moderador
[Avatar]

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

Rafael Nunes wrote:Você não tá resolvendo o problema deste jeito, só adiando.


Concordo. É melhor usar o JHat, descrito nos artigos, identificar a origem do problema e então corrigi-la. Se a origem for alguma biblioteca de terceiros, abra um issue para a biblioteca, como fiz com o pessoal do Groovy.

@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]
Felagund
GUJ Master
[Avatar]

Membro desde: 26/07/2006 11:51:36
Mensagens: 1732
Localização: Santa e Bela Catarina
Offline

Rafael Nunes wrote:
Felagund wrote:Viny vc é o cara, nossa, como tava me batendo pra resolve isso, esses topicos ajudaram bastante, pra quem não conseguiu, seta a variavel de ambienta JAVA_OPTS, que o tomcat usa

por exemplo


abraços a todos


Você não tá resolvendo o problema deste jeito, só adiando.


Como assim?

tem como explicar melhor?

att
Rafael Felix

Rolling With Code
Twitter
[WWW]
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Felagund wrote:

Como assim?

tem como explicar melhor?

Setando esse parâmetro você só está aumentando a memória da PermGen.
Mas se você está com um leak de memória um dia esses 256 também vão estourar.

O que você precisa fazer é descobrir onde está o problema e resolve-lo.

This message was edited 1 time. Last update was at 13/08/2008 09:24:14


Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
Rafael Nunes
Moderador
[Avatar]

Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline

Felagund wrote:Viny vc é o cara, nossa, como tava me batendo pra resolve isso, esses topicos ajudaram bastante, pra quem não conseguiu, seta a variavel de ambienta JAVA_OPTS, que o tomcat usa


Como assim?

tem como explicar melhor?


Por exemplo se sua PermGen começava com 128m e você tinha problema depois de um dia da aplicação rodando, você dobrou o tamanho para 256m agora ela passara ter problema só depois de dois dias.
Ou seja, você deu mais espaço para a PermGen, agora ela vai demorar mais para encher, mas isso não vai impedir de ela continuar enchendo.

------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."

http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
[Email]
Felagund
GUJ Master
[Avatar]

Membro desde: 26/07/2006 11:51:36
Mensagens: 1732
Localização: Santa e Bela Catarina
Offline

a sim, mas pro meu problema serve, é somente para um servidor de testes aqui, a aplicação roda em um Xeon Quad core , não tem esses problemas, ams estamos fazendo alguns testes e coloquei rodar num maquina um pouco pior, e não conseguia tirar alguns relatorios, isso já resolve o meu problema.

[]'s

att
Rafael Felix

Rolling With Code
Twitter
[WWW]
ViniGodoy
Moderador
[Avatar]

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

Felagund wrote:a sim, mas pro meu problema serve, é somente para um servidor de testes aqui, a aplicação roda em um Xeon Quad core , não tem esses problemas, ams estamos fazendo alguns testes e coloquei rodar num maquina um pouco pior, e não conseguia tirar alguns relatorios, isso já resolve o meu problema.


Ué, essa aplicação não irá para produção um dia??

@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]
Felagund
GUJ Master
[Avatar]

Membro desde: 26/07/2006 11:51:36
Mensagens: 1732
Localização: Santa e Bela Catarina
Offline

ViniGodoy wrote:
Felagund wrote:a sim, mas pro meu problema serve, é somente para um servidor de testes aqui, a aplicação roda em um Xeon Quad core , não tem esses problemas, ams estamos fazendo alguns testes e coloquei rodar num maquina um pouco pior, e não conseguia tirar alguns relatorios, isso já resolve o meu problema.


Ué, essa aplicação não irá para produção um dia??


ela já tah em produção, hehehe, o servidor de produção é o Xeon ele guenta, aqui tow rodando em um Athlon XP.

att
Rafael Felix

Rolling With Code
Twitter
[WWW]
Gustavo Marques
Thread.start()
[Avatar]

Membro desde: 25/10/2010 15:13:58
Mensagens: 49
Localização: Goiânia
Offline

Fiz um sisteminha para monitoramento da memoria JVM a distância, em uma aplicação web. Para facilitar a instalação fiz na forma de uma jsp com scriplets mesmo. Jogue a jsp lá e acesse que os números com gráficos são exibidos. Foi útil para eu identificar momentos de pico no uso da heap. Coloquei uma opção de chamar o Garbage colector. Depois de chamá-lo dá para ver o quanto o heap diminui. Também dá para ver o permgen space chegando no final e tomar alguma decisão na madrugada antes de um erro estourar no usuário. Enquanto vc vai corrigindo o código usando um bom profile, este 'profilezinho' até que quebra um galho.

Espero que seja útil
 Nome do arquivo jvm_memory.jsp [Disk] Download
 Descrição
 Tamanho 7 Kbytes
 Baixado:  266 vez(es)


programador.gustavo@gmail.com
[Email]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team