2010-07-05 16 views
43

ich diese Ausnahme häufig erhalten, wenn mein app auf tomcat mit Eclipse ausgeführt wird:java.lang.OutOfMemoryError: PermGen Raum in tomcat mit 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

möglich Duplikat [Wie mit "java.lang.OutOfMemoryError: PermGen Raum" behandeln Fehler] (http://stackoverflow.com/questions/88235/how-to-deal-with-java -lang-out-outofmemoryerror-permgen-space-error) – Lucero

Antwort

93

try zul Raum zu erhöhen, fügen Sie folgende Parameter vm Start-up

-XX: PermSize = 256m -XX: MaxPermSize = 256m zu Tomcat in Eclipse: Server > Open Launch Configuration > Arguments

MaxPermSize = 256m

auch -XX hinzufügen

Update (im Jahr 2014): einen Blick here at this question and answer über the new Java 8 Metaspace.

und werfen Sie einen Blick hier:

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

+0

Bei Netbeans können diese Parameter hinzugefügt werden in: Dienste> Server> Apache Tomcat (Rechtsklick)> Eigenschaften> Plattform> VM Optionen – DragonT

+0

Sie könnten auch '-server -Xmx1024m' hinzufügen – QuakeCore

+1

Diese Lösung verschiebt das Problem nur. Mein Tomcat läuft normalerweise mit MaxPermSize = 512m und erschöpft immer noch die PermSize. Dies passiert, wenn geänderter Code zu oft automatisch aktiviert wird. Mein Workaround besteht darin, Tomcat ab und zu explizit neu zu starten. – Hok

5

ich auch dieses Problem heute bekam. Es geschah völlig aus heiterem Himmel. Gestern habe ich JDK/JRE von 1.6.0_13 auf 1.6.0_21 aktualisiert, um ein spezifisches Problem von Glassfish 3.0.1 zu beheben, und Eclipse ist plötzlich mit diesen OutOfMemoryError: PermGen space Fehlern gebrochen. Nachdem (fälschlicherweise) über das Glassfish-Plugin geschimpft und festgestellt wurde, dass das Problem nach dem Bereinigen der Arbeitsbereichsmetadaten nicht behoben wurde, stellt sich heraus, dass dies durch die Änderung der JVM-Vendorzeichenfolge von "Sun" auf "Oracle" seit 1.6.0_20 verursacht wird . Eclipse hat den neuen JVM-Anbieter nicht erkannt und die VM-Argumente nicht wie in eclipse.ini angegeben angewendet.

Dies wurde als Eclipse-Ausgabe berichtet 319514 und die Eclipse-Jungen schnell ein patch veröffentlicht. Bis sie es repariert mehr dauerhaft zu erhalten, ist die Problemumgehung in der Tat die folgenden Zeilen in der eclipse.ini hinzuzufügen:

 
-XX:MaxPermSize=256m 

Also, wenn Sie vor kurzem eine JVM-Update haben, ist es wert sein könnte, einen Blick auf sie zu nehmen.

20

Sie können diese Argumente für Eclipse konfigurieren:

„Um dies zu lösen, habe ich aufgehört den Server in Eclipse doppelt geklickt auf dem Server in dem Server Registerkarte Übersichtsseite für den Server öffnen klickte auf .. . Öffnen Sie Startkonfiguration und dann auf die Argumente Registerkarte

ich habe die folgenden VM Argumente:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled 

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

+0

Vielen Dank! Unser Team hatte einige Probleme auf unseren QA- und Produktionsservern, nachdem Web-Service-Stacks geändert wurden. Diese beiden Optionen haben unsere PermGen-Probleme behoben.(Vorerst zumindest.) –

Verwandte Themen