【问题标题】:Eclipse Link DatabaseField and Memory leakEclipse Link DatabaseField 和内存泄漏
【发布时间】:2014-11-27 09:34:37
【问题描述】:

我在 DatabaseField 类上有内存泄漏问题。它消耗越来越多的内存,并且在 gc 操作期间从不释放任何内存。每次我们启动压力测试时,它都会在 2 周后保持 20mb 内存,导致我的服务器崩溃。

这个类和垃圾收集器的交互是什么。

【问题讨论】:

    标签: jpa memory-leaks eclipselink


    【解决方案1】:

    您必须使用诸如VisualVMMAT 之类的内存堆分析工具,但无论如何,这很难解决。

    这里有answer about itthis post 告诉你如何使用VisualVM 捕捉它。

    祝你好运! (你需要它;-))

    【讨论】:

      【解决方案2】:

      看起来您在 EclipseLink 邮件列表中发布了更多信息,但仍不足以说明问题所在。许多工具都能够追踪对象持有的东西,因此它不会被 GCd;如果您追踪 DatabaseField,我敢打赌,您会在应用程序中发现导致泄漏的问题。

      根据我的经验,使用 JPA 时内存泄漏的最常见原因是应用程序缓存从不同 EntityManager 读取的实体。由于这些实体具有对读取它们的上下文的引用,它们阻止了 EntityManager 被 GC,这也阻止了它的内部对象和缓存被 GC。解决方案是不在您的应用程序中缓存实体 - 它们已经缓存在 JPA 中,因此您正在复制内存使用量,而不会受益于通过应用程序进行的更改在应用程序的缓存中更新。只需存储实体的 ID 并在需要时使用 find 调用来检索它。如果必须使用缓存,您可以使用只读查询来检索要缓存的实体,如下所述: http://docs.oracle.com/cd/E27559_01/doc.1112/e28552/toplink.htm

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-02
        • 2013-11-08
        • 2016-05-03
        • 2011-11-25
        • 2010-11-19
        • 2014-09-27
        • 2013-07-31
        • 1970-01-01
        相关资源
        最近更新 更多