【问题标题】:PermGen space issue with Glassfish/HibernateGlassfish/Hibernate 的 PermGen 空间问题
【发布时间】:2011-07-27 10:23:56
【问题描述】:

我正在 Glassfish 3.1 上运行 GWT+Hibernate 应用程序。几个小时后,我的 Permgen 空间用完了。这没有任何 webapp 重新加载。我正在使用–XX:MaxPermSize=256m –XmX1024m

我听取了this page 的建议,发现我泄露了大量的类——我所有的 Hibernate 模型和我所有的 GWT RequestFactory 代理。

上面引用的指南说“检查链,找到意外引用并修复代码”。说起来容易做起来难。

类加载器总是指向org.glassfish.web.loader.WebappClassLoader 的实例。进一步挖掘,我发现了很多来自 $Proxy135 和类似名称对象的引用。但我不知道还有什么办法可以通过。

【问题讨论】:

  • 尝试使用这个参数:-XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256m

标签: java memory-leaks classloader glassfish-3 permgen


【解决方案1】:

新的类对象被放置到 PermGen 中,因此占用的空间越来越多。无论您将 PermGen 空间做得有多大,在足够的部署之后,它都将不可避免地达到顶峰。您需要做的是采取措施冲洗 PermGen,以便稳定其大小。有两个 JVM 标志可以处理这种清理:

-XX:+CMSPermGenSweepingEnabled

此设置包括垃圾收集运行中的 PermGen。默认情况下,PermGen 空间永远不会包含在垃圾回收中(因此会无限增长)。

-XX:+CMSClassUnloadingEnabled

此设置告诉 PermGen 垃圾收集扫描对类对象执行操作。默认情况下,即使在垃圾回收期间访问 PermGen 空间时,类对象也会获得豁免。

【讨论】:

  • 但我看到这种情况发生在一次部署之后。为什么我的所有休眠/GWT 代理仍然被应用服务器引用?
  • 嗨,我还有一个问题,我应该在哪里添加这些命令?
  • 在 Glassfish 3 中,编辑 glassfish/domain_folder/config/domain.xml,在标签java-config 中应该已经有类似的配置,只需添加新的jvm-options 元素
【解决方案2】:

(我无法查看您提供的链接,因为它已被 websense 阻止,所以如果我要重申任何内容,我深表歉意)

听起来你有一个类加载器泄漏。这些很难追踪,请将这些选项添加到实例配置中的 JVM 选项中

-XX:+PrintGCDetails
-XX:+TraceClassUnloading
-XX:+TraceClassLoading

现在,当您运行应用程序时,您可以查看位于 domain/logs 文件夹中的 jvm.log 并查看正在加载和卸载的内容。很可能,您会看到相同的类一遍又一遍地加载。

罪魁祸首是 JAXB,尤其是当您一遍又一遍地创建新的 JAXBContext 时。

【讨论】:

    【解决方案3】:

    有一些不错的工具可以帮助解决这个问题,尽管你永远不会知道。 JDK(1.6 u1 及更高版本)附带 jhat 和 jmap。这些工具会有很大帮助,特别是如果您使用 jhat JavaScript 查询支持。

    见:

    http://blog.ringerc.id.au/2011/06/java-ee-application-servers-learning.html

    http://blogs.oracle.com/fkieviet/entry/classloader_leaks_the_dreaded_java

    http://www.mhaller.de/archives/140-Memory-leaks-et-alii.html

    http://blogs.oracle.com/sundararajan/entry/jhat_s_javascript_interface

    【讨论】:

      【解决方案4】:

      我通过迁移到 Tomcat “解决”了这个问题。

      【讨论】:

        猜你喜欢
        • 2012-08-10
        • 2014-06-21
        • 1970-01-01
        • 2011-12-02
        • 1970-01-01
        • 2011-09-04
        • 2013-03-08
        相关资源
        最近更新 更多