Classe Java (PermGen) Vazamento de memória (aplicativos da Web) - Solução genérica?
-
22-09-2019 - |
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.
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.
Eu usei o método deste site e ele ajudou.http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen space/
Poucos ponteiros aqui também,http://minmaxmim.blogspot.com/2010/01/javalangoutofmemoryerror-java-heap.html
Verifique também o artigo JavalangOutOfMemoryError-Permgen-Space.