2010-07-05 13 views
43

me sale esta excepción con frecuencia cuando se ejecuta mi aplicación en Tomcat usando Eclipse:java.lang.OutOfMemoryError: PermGen espacio en Tomcat con Eclipse

java.lang.OutOfMemoryError: PermGen space 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1850) 
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:890) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1850) 
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:890) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:265) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:180) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134) 
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101) 
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80) 
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94) 
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156) 
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135) 
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1650) 
    at com.spacerdv.dao.impl.UserDaoImpl.getUserDetails(UserDaoImpl.java:170) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
+0

posible duplicado de [¿Cómo lidiar con "java.lang.OutOfMemoryError: PermGen espacio" error] (http://stackoverflow.com/questions/88235/how-to-deal-with-java -lang-outofmemoryerror-permgen-space-error) – Lucero

Respuesta

93

tratar de aumentar el espacio permanente, añadir los siguientes parámetros a VM puesta en marcha

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

también añadir -XX: MaxPermSize = 256m a Tomcat en Eclipse: Server > Open Launch Configuration > Arguments

Update (en 2014): echar un vistazo sobre here at this question and answerthe new Java 8 Metaspace.

y echar un vistazo aquí:

How to deal with “java.lang.OutOfMemoryError: PermGen space” error

+0

En Netbeans, estos parámetros se pueden agregar en: Servicios> Servidores> Apache Tomcat (clic con el botón derecho)> Propiedades> Plataforma> Opciones de VM – DragonT

+0

También es posible que desee '-server -Xmx1024m' – QuakeCore

+1

Esta solución solo pospone el problema. Mi gato generalmente se ejecuta en MaxPermSize = 512m y todavía agota el PermSize. Sucede cuando el código modificado se autodefila con demasiada frecuencia. Mi solución es reiniciar tomcat explícitamente de vez en cuando. – Hok

5

Tengo este problema hoy en día también. Pasó completamente de la nada. Ayer he actualizado JDK/JRE de 1.6.0_13 a 1.6.0_21 para arreglar un problema específico de Glassfish 3.0.1 y Eclipse de repente rompió con esos OutOfMemoryError: PermGen space errores. Después de despotricar (incorrectamente) sobre el plugin Glassfish y concluir que el problema no se solucionó después de limpiar los metadatos del espacio de trabajo, resulta que esto se debe al cambio de la cadena del proveedor de JVM de "Sun" a "Oracle" desde 1.6.0_20 . Eclipse no reconoció el nuevo proveedor de JVM y, por lo tanto, no aplicó los argumentos de VM como se especifica en eclipse.ini.

Esto se informó como Eclipse issue 319514 y los chicos de Eclipse lanzaron rápidamente un patch. Hasta que consiguen lo arreglen de forma más permanente, la solución es de hecho añadir las siguientes líneas al eclipse.ini:

 
-XX:MaxPermSize=256m 

Por lo tanto, si recientemente hizo una actualización de JVM, podría valer la pena echar un vistazo a la misma.

20

Puede configurar estos argumentos para Eclipse:

"para resolver este me detuvo el servidor en Eclipse doble clic en el servidor en los Servidores pestaña para abrir la página de perfiles para el servidor hizo clic en la .. . Abrir configuración lanzamiento y luego en los argumentos pestaña

que añaden los siguientes argumentos de VM:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled 

árbitro http://malcolmmallia.com/malcblog/?p=60

+0

¡Gracias! Nuestro equipo estaba teniendo algunos problemas en nuestros servidores de QA y producción después de cambiar los stacks de servicios web, y estas dos opciones arreglaron nuestros problemas con PermGen.(Por ahora al menos.) –

Cuestiones relacionadas