java.lang.OutOfMemoryError: PermGen espace dans tomcat avec éclipse

Je reçois souvent cette exception lors de l’exécution de mon application sur Tomcat en utilisant 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.doComstack(QueryTranslatorImpl.java:180) at org.hibernate.hql.ast.QueryTranslatorImpl.comstack(QueryTranslatorImpl.java:134) at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:101) at org.hibernate.engine.query.HQLQueryPlan.(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) 

essayez de lever l’espace perm, ajoutez les parameters suivants au démarrage de vm

-XX: taille de la requête = 256m -XX: taille de la valeur maximale = 256m

ajoutez également -XX: MaxPermSize = 256m à Tomcat dans Eclipse: Server > Open Launch Configuration > Arguments

Mise à jour (en 2014): jetez un coup d’œil à cette question et répondez au nouveau Java 8 Metaspace.

et regardez ici:

Comment gérer les erreurs «java.lang.OutOfMemoryError: PermGen space»

Vous pouvez configurer ces arguments pour eclipse:

“Pour résoudre ce problème, j’ai arrêté le serveur dans Eclipse. Double-cliquez sur le serveur dans l’onglet Servers pour ouvrir la page Overview du serveur. Cliquez sur Open Launch Configuration , puis sur l’onglet Arguments .

J’ai ajouté les arguments VM suivants:

 -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled 

ref à http://malcolmmallia.com/malcblog/?p=60

J’ai aussi ce problème aujourd’hui. C’est arrivé tout à fait par hasard. Hier, j’ai mis à jour JDK / JRE de 1.6.0_13 à 1.6.0_21 pour corriger un problème spécifique à Glassfish 3.0.1 et Eclipse a soudainement rompu avec les erreurs d’ OutOfMemoryError: PermGen space . Après avoir (incorrectement) affiché le plug-in Glassfish et avoir conclu que le problème n’avait pas été résolu après le nettoyage des métadonnées de l’espace de travail, il s’est avéré que la chaîne de fournisseur JVM est passée de “Sun” à “Oracle” depuis la version 1.6.0_20. . Eclipse n’a pas reconnu le nouveau fournisseur JVM et n’a donc pas appliqué les arguments de la machine virtuelle comme spécifié dans eclipse.ini .

Cela a été signalé dans le numéro 319514 Eclipse et les garçons Eclipse ont rapidement publié un correctif . Jusqu’à ce qu’il soit corrigé de manière plus permanente, la solution consiste en effet à append les lignes suivantes à l’ eclipse.ini :

 -XX: MaxPermSize = 256m

Donc, si vous avez récemment effectué une mise à jour de la JVM, cela pourrait valoir la peine d’y jeter un coup d’œil.