2010-07-05 47 views
43

使用eclipse Tomcat上運行我的應用程序時,我得到這個異常頻繁:java.lang.OutOfMemoryError:在tomcat的PermGen的空間日食

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

可能重複[如何處理「java.lang.OutOfMemoryError:PermGen空間」錯誤](http://stackoverflow.com/questions/88235/how-to-deal-with-java -lang-outofmemoryerror-permgen-space-error) – Lucero 2010-07-05 11:41:03

回答

93

儘量擡高燙髮空間,添加下列參數VM啓動

-XX:PermSize =256米-XX:MaxPermSize參數=256米

還添加-XX:MaxPermSize參數=256米到Tomcat在Eclipse:Server > Open Launch Configuration > Arguments

更新(2014年):看看here at this question and answerthe new Java 8 Metaspace.

這裏看看:

How to deal with 「java.lang.OutOfMemoryError: PermGen space」 error

+0

在Netbeans上,可以將此參數添加到:服務>服務器> Apache Tomcat(右鍵單擊)>屬性>平臺> VM選項 – DragonT 2015-03-10 20:20:10

+0

也可以添加'-server -Xmx1024m' – QuakeCore 2015-10-19 08:42:31

+1

此解決方案只會推遲問題。我的tomcat通常運行在MaxPermSize = 512m並仍然耗盡PermSize。當更改後的代碼經常自動部署時會發生這種情況。我的解決方法是每隔一段時間重新啓動一次tomcat。 – Hok 2016-05-31 11:53:20

5

我今天拿到這個問題爲好。它完全是出於藍色。昨天我已經將JDK/JRE從1.6.0_13更新到1.6.0_21來修復Glassfish 3.0.1特定問題,並且Eclipse突然打破了那些OutOfMemoryError: PermGen space錯誤。在Glassfish插件上(不正確地)咆哮並得出結論,清理工作區元數據後問題未解決,事實證明這是由於JVM供應商字符串從「Sun」變爲「Oracle」後導致1.6.0_20 。 Eclipse沒有識別新的JVM供應商,因此沒有應用eclipse.ini中指定的VM參數。

這被報告爲Eclipse問題319514,並且Eclipse男孩們很快發佈了patch。直到他們得到它固定更持久的解決辦法的確是以下行添加到eclipse.ini

 
-XX:MaxPermSize=256m 

因此,如果你最近做了一個JVM更新,它可能是值得去看一看吧。

20

您可以爲Eclipse配置這些參數:

「爲了解決這個我停了服務器在Eclipse中雙擊在服務器點擊服務器上標籤打開概覽頁面服務器點擊了。打開啓動配置然後在參數標籤

我增加了以下VM參數:

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled 

參考http://malcolmmallia.com/malcblog/?p=60

+0

謝謝!我們的團隊在更改Web服務堆棧後,在我們的QA和生產服務器上遇到了一些問題,這兩個選項解決了我們的PermGen問題。(至少現在。) – 2012-04-03 17:42:01