【问题标题】:java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen spacejava.util.concurrent.ExecutionException:java.lang.OutOfMemoryError:PermGen 空间
【发布时间】:2013-12-01 13:34:43
【问题描述】:

每个人

我运行服务器时出现异常,我认为是内存泄漏!

我尝试了许多参数 JAVA_OPS 的值,但仍然出现异常!!!

在控制台中我得到了这个异常,你可以看到如下!

Nov 18, 2013 2:48:48 PM org.apache.catalina.startup.HostConfig deployDescriptors
SEVERE: Error waiting for multi-thread deployment of context descriptors to complete
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:578)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1401)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:317)
at     
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:347)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1140)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.OutOfMemoryError: PermGen space

Exception in thread "main" java.lang.OutOfMemoryError: PermGen space

【问题讨论】:

  • 可能是Tomcat的问题。当涉及到类加载器时,它以泄漏而闻名....
  • 什么时候发生,你在做什么?简单地添加内存和更多内存并不能解决问题,只会延迟。

标签: java tomcat memory-leaks out-of-memory


【解决方案1】:

指定您已经尝试过的“许多值”总是有意义的。

首先:他们需要是JAVA_OPTS,但这也可能是这个问题中的一个错字。但是,使用CATALINA_OPTS 会更好。

最重要的是,当出现 PermGen 错误时,-Xmx 根本没有帮助。您想设置-XX:MaxPermSize=256m(或其他一些内存量)。当您搜索错误消息时,您会发现很多有关此问题的信息 - PermGen 是 Sun/Oracle JVM 使用的特定内存区域。增加可用堆内存根本没有帮助。

【讨论】:

    【解决方案2】:

    我发现GlassFish(另一个Java 应用程序服务器)也会发生这种情况。通常,我们必须重新启动 Application Server 以释放 Application Server 使用的所有内存和资源。大多数 Java 应用程序服务器,例如 GlassFish 和 Tomcat,都可能非常消耗内存。您可能希望将以下行添加到您的 catalina.sh 文件(或其他 catalina 配置文件)中以更改 JVM 参数,这可能会增加内存分配:

    export CATALINA_OPTS="-Xms512M -Xmx1024M"
    

    【讨论】:

      【解决方案3】:

      在不分析原因的情况下增加内存有什么意义。我建议尝试使用一些分析工具(JProfiler、YourToolkKit)来找出问题所在。

      一旦您对导致问题的原因有所了解,就可以着手解决(例如:打开的连接、未关闭的流等)

      祝你好运。

      【讨论】:

        【解决方案4】:

        在 linux 中,将以下行添加到位于 path_to_tomcat/bin 中的catalina.sh

        CLASSPATH=
        if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
          . "$CATALINA_BASE/bin/setenv.sh"
        elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
          . "$CATALINA_HOME/bin/setenv.sh"
        fi
        

        之后,您应该创建 setenv.sh(如果 bin 中不存在) 如果你在 path_to_tomcat/bin

        vi ./setenv.sh

        并添加以下行

        export JAVA_OPTS="-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m"
        

        现在重启tomcat你的问题就解决了……

        【讨论】:

          【解决方案5】:

          在 linux 中,创建一个 setenv.sh 文件并将该文件保存在 tomcat/bin 文件夹中。 在文件中添加以下行并保存。

          导出 CATALINA_OPTS="$CATALINA_OPTS -server -Xms256m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m"

          现在重启tomcat,你就可以了..!!

          【讨论】:

            【解决方案6】:

            您必须在您的 tomcat 服务器 VM 参数中设置 XX:MaxPermSize,如下所示:

            根据您在本地系统上的内存,您可以修改:

            双击服务器转到 打开启动配置

            在 vm 参数中 放这一行

            -XX:MaxPermSize=2048m

            现在重启tomcat

            【讨论】:

              猜你喜欢
              • 2015-06-28
              • 2013-09-13
              • 2021-10-17
              • 2011-06-18
              • 1970-01-01
              • 2021-04-07
              • 1970-01-01
              • 2017-10-29
              • 2012-09-17
              相关资源
              最近更新 更多