java.lang.OutOfMemoryError: PermGen space
04/02/2012 21:38
0
olá pessoal!

essa semana fiz o deploy de uma app , colocando o arquivo .war na pasta
/var/lib/tomcat6/webapps
estava funcionando ok, mas hoje precisei enviar outro .war

enviei com o mesmo nome
o arquivo foi substituido e ficou tudo certo com a pasta da app
mas a app não inicializou, vejam :

alguém sabe a causa desse problema e o que eu posso fazer?
(nao tenho privilegios para resetar o tomcat, se é que isso resolveria)

org.springframework.beans.factory.access.BootstrapException: Error executing bootstraps; nested exception is org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.OutOfMemoryError: PermGen space
at org.codehaus.groovy.grails.web.context.GrailsContextLoader.createWebApplicationContext(GrailsContextLoader.java:87)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:905)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:740)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:500)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1345)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:303)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.OutOfMemoryError: PermGen space
at grails.spring.BeanBuilder.invokeBeanDefiningClosure(BeanBuilder.java:723)
at grails.spring.BeanBuilder.beans(BeanBuilder.java:573)
at grails.spring.BeanBuilder.invokeMethod(BeanBuilder.java:519)
... 1 more
Caused by: java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
Tags: OutOfMemoryError, PermGen space, war, deploy


0
olá!

eu tbém já tive esse erro de java.lang.OutOfMemoryError: PermGen space.

resolvi setando os seguintes parâmetros na configuração do tomcat:

-XX:PermSize=256m
-XX:MaxPermSize=512m



t+
06/02/2012 10:28


0
Faz tempo que não uso o TomCat, mas vou tentar lembrar.

No Windows:
- se seu Tomcat for instalado, você pode alterar essas configurações no console do tomcatw.exe que você usa pra iniciar e parar o tomcat. Deve ter uma Aba chamada opções da JVM se bem me lembro, lá você adiciona as 2 linhas que o Rodrigo lhe passou, ou substitui as que tem lá, caso já existam com o mesmo valor;

- se o seu tomcat for descompactado, acho que é no arquivo catalina.bat ou startup.bat (não lembro bem) que tem uma variável chamada JAVA_OPTS;

No Linux
- como só tem a opção descompactada (pelo menos nunca conheci outra), basta fazer a mesma coisa que no Windows, só que alterando o .bat por .sh;

Porém, gostaria de alertá-lo sobre as alterações e acontecimentos desse erro. Esse estouro de memória, se dá quando sua área de geração permanente, estoura o tamanho de sua capacidade na JVM e a aplicação não tem mais onde colocar os Objetos que são permanentes em sua App (variáveis e objetos státics, pool de strings, etc.) e aí espoca esse erro e a App para de funcionar.

Aumentar isso pode resolver dependendo da sua aplicação, mas o ideal mesmo é você fazer um monitoramento de sua App e ver em que momento ocorre o gargalo.

As vezes alterando o código, conseguimos resolver o problema sem alterar os parâmetros da memória, identificar e resolver o problema, pode evitar que o mesmo volte. Como essa área da memória é pouco coletada, futuramente (mesmo aumentando a memória) pode estourar de novo o erro.

Eu lhe recomendo a dupla: JMeter + Probe (ou VisualVM que vem na JDK);

JMeter é um SOftware da Apache para testes de carga e stress e o Probe vem junto com o Tomcat (só não lembro a partir de qual versão) e faz o monitoramento da sua JVM, fazendo a leitura do Heap.

Para complementar o aprendizado, recomendo as seguintes leituras:
- http://blogs.oracle.com/fkieviet/entry/classloader_leaks_the_dreaded_java
- http://blogs.oracle.com/fkieviet/entry/how_to_fix_the_dreaded
- http://www.arquiteturajava.com.br/ (Leia os 2 disponíveis no cáp. 2)

Abs [] e bons estudos.
08/02/2012 13:49



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto