java.lang.OutOfMemoryError: PermGen space

Esses dias acabei por receber o “java.lang.OutOfMemoryError: PermGen space”. Não o conhecia antes e levei algumas horas até conseguir resolvê-lo. Resolvi criar o post pra tentar ajudar mais alguém que esteja com o mesmo problema. O post é mais um “guia de caminho” do que uma explicação propriamente dita. Mas vamos lá.

É importante explicar o que é esse tal de PermGen space: a JVM usa uma área de memória (o tal do PermGen space) para criar os classloaders (que gera os .class da sua aplicação), pool de strings, etc… Com as operações de deploy e undeploy essa área de memória vai “inflando” até estourar. É nesse ponto que ocorre o “java.lang.OutOfMemoryError: PermGen space”. O que alguns recomendam como solução é a alteração da quantidade de memória que a JVM pode usar, setando as propriedades -XX:PermSize  e  -XX:MaxPermSize, dessa forma, a JVM terá mais espaço para trabalhar e consequentemente o problema estará resolvido. Ok, mas por pouco tempo! Essa “solução” apenas adia o problema, já que o limite de memória apenas aumentou, mas numa emergência talvez isso sirva.

Outro caminho a seguir, e um pouco mais trabalhoso, é trocar a JVM ou o tomcat. Os links abaixo me ajudaram a compreender mais o funcionamento da JVM e sobre as possíveis soluções.

http://www.freshblurbs.com/explaining-java-lang-outofmemoryerror-permgen-space
http://www.guj.com.br/java/97075-desmistificando-o-javalangoutofmemoryerror-permgen-space
http://www.guj.com.br/java/92491-the-dreaded-permgen-problem* http://codare.net/2007/01/11/java-solucionando-o-erro-de-permgen-space/
http://blognotfoundexception.blogspot.com/2006/10/javalangoutofmemoryerror-permgen-space.html
http://javafree.uol.com.br/artigo/876400/ClassLoader-Desmitificado.html

Apesar de todo esse aparato de discussões e explicações eu resolvi o problema aqui de forma bem simples (utilizando o Eclipse Helios). Vamos a elas:

  • Entre nas configurações do servidor Tomcat (versão 6 no meu caso), e na aba “Modules” deixe apenas o projeto no qual está trabalhando no nomento. Isto evita que o tomcat faça o deploy de aplicações que não estão sendo usadas. (talvez isso já resolva).
  • Outra coisa é dar um clean no Tomcat, para isso clique sobre o servidor (no Eclipse) com o botão direito do mouse e clique em “Clean Tomcat Work Directory”

Isso resolveu o meu problema, talvez sirva para outros casos e talvez não. Onde não resolveu, o ideal é procurar a solução nos links que eu postei acima.

That’s it.

No comments yet

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: