45 votes

java.lang.OutOfMemoryError: espace PermGen dans tomcat avec eclipse

Je reçois fréquemment cette exception lors de l'exécution de mon application sur tomcat avec 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)
 

97voto

Chris Points 4552

essayez d'augmenter perm espace, ajouter les paramètres suivants pour vm start-up

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

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

Mise à jour (en 2014): prendre un coup d'oeil ici à cette question et la réponse sur le nouveau Java 8 Metaspace.

et de prendre un coup d'oeil ici:

La façon de traiter avec "java.lang.OutOfMemoryError: PermGen space" erreur

21voto

Ali Points 161

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 Serveurs pour ouvrir la page de présentation du serveur. Cliquez sur Ouvrir la configuration de lancement , puis sur l'onglet Arguments .

J'ai ajouté les arguments de machine virtuelle suivants:

 -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
 

Référez-vous à http://malcolmmallia.com/malcblog/?p=60

5voto

BalusC Points 498232

J'ai eu ce problème aujourd'hui. Il est arrivé complètement hors de la bleue. Hier j'ai mis à jour JDK/JRE de 1.6.0_13 à 1.6.0_21 de fixer un Glassfish 3.0.1 problème spécifique et Eclipse soudain avec ceux - OutOfMemoryError: PermGen space d'erreurs. Après (à tort) rodomontades sur Glassfish plugin et de conclure que le problème n'était pas résolu après le nettoyage de l'espace de travail de métadonnées, il s'avère que cela est causé par le changement de la JVM fournisseur de la chaîne de "Soleil" à "Oracle" depuis 1.6.0_20. Eclipse ne reconnaît pas la nouvelle JVM vendeur et n'a donc pas appliquer la VM arguments comme spécifié dans l' eclipse.ini.

Cela a été rapporté que Eclipse question 319514 et l'Éclipse garçons rapidement publié un patch. Jusqu'à ce qu'il fixe de façon plus permanente, la solution est en effet d'ajouter les lignes suivantes à l' eclipse.ini:

-XX:MaxPermSize=256m

Donc, si vous avez récemment fait une mise à jour de la JVM, il pourrait être utile de prendre un coup d'oeil à elle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X