Classe Java (PermGen) Vazamento de memória (aplicativos da Web) - Solução genérica?

StackOverflow https://stackoverflow.com/questions/1996088

Pergunta

Eu tenho um vazamento de memória perm gen, que eu sei. O perfil usando o JVisualVM mostra que, ao fazer a implantação quente (por exemplo, pare e inicie um aplicativo sem matar a JVM, no tomcat, websphere, weblogic etc) - o espaço permgen está constantemente aumentando.

Depois de ler, usando o JHAT e outras ferramentas avançadas, percebi que provavelmente tenho uma referência ao WebAppClassLoader de uma aula em algum lugar de seus carregadores de classe pai.

Eu não conseguia defini -lo, apesar de ter feito algumas consultas enormes baseadas em javascript no jhat

Não existe um utilitário simples que descobre quem é responsável pelo seu carregador de classe para não ser coletado de lixo (permitindo assim a coleta de lixo de classes carregadas por ele)?

Eu experimentei JProfiler, JVisualvm, Jhat e muito Google

Para todos os amigos LMGTFY - passei cerca de um dia e meio de leitura fóruns com instruções de passo a passo, sem sorte. Estou procurando um utilitário ou código que sai:

O objeto X da classe Y é a única raiz GC que impede que suas classes sejam removidas.

Foi útil?

Solução

Existe uma solução insatisfeita, mas fácil: não seja de implantação em ambientes de produção. Você pode configurar um cluster de dois contêineres de servlet e eles atualizam um de cada vez com uma reinicialização.

Outras dicas

As realidades de reimplantamentos frequentes ... O melhor que você pode fazer é aumentar o tamanho da perm gen usando -xx: maxpermsize = 256m. Isso pode comprar algumas reimplementações mais por reinicialização da JVM. Ou leia em http://my.opera.com/karmazilla/blog/2007/03/15/permgen-strikes-back

Cuidado que, se os carregadores de classe não puderem ser GC-ED, brincar com a JVM não ajudará. É melhor você esquecer as implantações frequentes, especialmente na produção, para o Dev é útil, no entanto.

Poucos ponteiros aqui também,http://minmaxmim.blogspot.com/2010/01/javalangoutofmemoryerror-java-heap.html

Verifique também o artigo JavalangOutOfMemoryError-Permgen-Space.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top