java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError:tomcat 中的 PermGen 空间

Posted

技术标签:

【中文标题】java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError:tomcat 中的 PermGen 空间【英文标题】:java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space in tomcat 【发布时间】:2014-07-01 02:44:41 【问题描述】:

我正在使用 Apache-tomcat-7.0.12 运行我的应用程序,每次重新启动服务器时都会出现以下错误。

java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
    at org.apache.tomcat.util.threads.DedicatedThreadExecutor.execute(DedicatedThreadExecutor.java:62)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5198)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3832)
    at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:424)
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1205)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1391)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1401)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1401)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1380)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:188)
    at org.apache.tomcat.util.threads.DedicatedThreadExecutor.execute(DedicatedThreadExecutor.java:56)
    ... 10 more
Caused by: java.lang.OutOfMemoryError: PermGen space

我已经设置了变量 CATALINA_OPTS 和 JAVA_OPTS 。 CATALINA_OPTS :-Xms512M -Xmx1024M JAVA_OPTS :-Xms1024m -Xmx10246m -XX:NewSize=512m -XX:MaxNewSize=356m -XX:PermSize=1024m -XX:MaxPermSize=1024m

但仍然遇到同样的错误。我正在使用 sts 作为 IDE。

请帮助我,如何解决这个问题。

【问题讨论】:

【参考方案1】:

Java 应用程序只允许使用有限的内存量。您的特定应用程序可以使用的确切内存量是在应用程序启动期间指定的。您正是通过指定 -Xmx 和 -XX:MaxPermSize 参数来做到这一点的。

“java.lang.OutOfMemoryError: PermGen space”消息表示内存中Permanent Size区域已用完,可以尝试增加已经指定的参数。

但是查看您当前的配置,您已经将 permgen 大小设置为 1024m,所以我可以猜到

a) 您的配置更改未被采纳 - 例如,使用 ps 查看正在运行的进程,如下所示,我看到 512m 被用作允许的最大 permgen 大小:

Ivos-MacBook-Pro:testcases ivomagi$ ps axu|grep java
ivomagi           999 195.3  1.5  9644872 129756 s000  S+    4:15PM   0:04.47 /usr/bin/java -XX:MaxPermSize=512m eu.plumbr.demo.GarbageProducer

b) 您正在尝试加载 Truly Big (TM),在这种情况下您需要进一步增加 permgen

【讨论】:

以上是关于java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError:tomcat 中的 PermGen 空间的主要内容,如果未能解决你的问题,请参考以下文章