【问题标题】:Tomcat7 OutOfMemoryError: PermGen spaceTomcat7 OutOfMemoryError:PermGen 空间
【发布时间】:2014-08-08 04:30:27
【问题描述】:

我有tomcat 7.0.47grails 2.3.7 and 2 in RichFaces 4.3.4 in windows 2003 server(2Gb RAM) 中的一个项目。如果我在tomcat 中加载其中的 2 个 - 它们可以工作,但如果我加载所有这些 (3) - 我会看到 permgen outofmemory error。 我尝试更改MaxPermSize in tomcat,但没有得到结果。 grails 项目很大。我可以对项目做些什么来优化 PermGet 内存使用吗?

我将tomcat 更改为GlassFish 3.1.2。现在它对于所有项目来说已经足够了。但是我的 Grails 项目中的 Easygrig 插件有问题。

【问题讨论】:

    标签: tomcat grails richfaces tomcat7


    【解决方案1】:

    Java 应用程序只能使用有限的内存量。您的特定应用程序可以使用的确切内存量是在应用程序启动期间指定的。为了使事情变得更复杂,Java 内存被分成不同的区域,其中一个区域 - 名为 permgen - 在这种情况下您已经用尽了。

    “java.lang.OutOfMemoryError: PermGen space”的主要原因:加载到永久代的类太多或太大。在您的情况下,我怀疑您实际上是否设法将 2GB 数据加载到 permgen 中,我怀疑您在 Tomcat 配置中拼错了属性 (-XX:MaxPermSize),或者 Tomcat 没有选择此配置一点也不。

    您可以通过将 jconsole 附加到 Tomcat 进程等来验证配置更改是否已被获取,类似于以下示例:

    my-machine me$ jps
    3160 Jps
    1514 org.apache.catalina.startup.Bootstrap
    my-machine me$ jconsole 1514
    

    导航到 VM 摘要选项卡,您应该会看到 Tomcat 实例实际使用的参数。

    【讨论】:

      【解决方案2】:

      没有。您的系统资源不足。在 Java 的内存模型中,永久生成是类、方法和其他永久事物存在的地方。为了减少 PermGen 容量,您需要减少永久应用程序成员。在 2GB RAM 上你会很难做到这一点。

      祝你好运!

      【讨论】:

      • 我认为 2GB 应该足够 3 个项目
      • 想你所想;你的 JVM 告诉你真相:-)
      • 我同意Daniel的观点,您应该使用JConsole之类的任何工具在运行时检查JVM内存消耗情况,您会得到答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 2015-11-18
      • 2017-02-02
      相关资源
      最近更新 更多