【问题标题】:Why is my JDBCBrokerFactory growing为什么我的 JDBCBrokerFactory 越来越大
【发布时间】:2014-09-03 08:50:29
【问题描述】:

我们使用 OpenJPA 2.3.0(在 2.2.0 之前有同样的问题)在 WAS 环境 (8.5) 中使用 Spring 在某种程度上连接到 DB2 数据库。 我们遇到的问题是应用程序不断消耗越来越多的内存,直到最终崩溃。

当使用(许多)推荐的内存分析器工具时,我们得到了一个罪魁祸首 JDBCBrokerFactory。 它有一个 ConcurrentHashMap(有 16 个条目),给定的使用数字负责丢失的内存。 (最大内存1024M,经过10个小时的连续但不太粗暴的负载,这个类负责400M,是MAT唯一指出的)

工厂类由环境持有(org.springframework.orm.jpa.SharedEntityManagerCreator 和 com.volvo.jvs.runtime.springutils.SpringContextBootstrapper)对我来说并不奇怪,但我希望该类不会增长或至少在需要时收缩得更好。 (在 JPA 2.2.0 中有更多的类保留了这个类,仍然没有“我们的”类)

当然,这个类不是我们与之交互的类之一(OpenJPA 实现的内部),这使得我们更难看出我们在使用 JPA 时是否犯了错误。

非常感谢任何关于我们可以改进以限制 JDBCBrokerFactory 破坏的想法或提示。

/马丁

【问题讨论】:

    标签: java jpa memory-leaks openjpa


    【解决方案1】:

    如果您的代码将内容存储在地图中,如果您不希望地图不断增长,则最终需要从地图中删除项目。

    【讨论】:

      【解决方案2】:

      确保您的应用程序正确地清理了它的 EntityManagers。请务必在使用完 EntityManager 后关闭它。

      【讨论】:

      • 我们只使用注入的 EntityManager,所以我不能将它们视为泄漏的源头。
      【解决方案3】:

      在我看来,您的应用程序中的连接没有得到正确清理。这就是为什么这张地图无限增长的原因。我建议您手动正确清理连接或使用 JPA 与 spring 的正确集成,因为 spring 会自行处理它。

      【讨论】:

      • 我们不手动管理任何连接,对于自定义查询,我们使用 JPA,因此我们没有任何可以关闭的东西。希望我们的 JPA-xml 配置是有序的,我们也不会在这里做很多花哨的事情。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 2021-08-28
      • 2018-04-21
      相关资源
      最近更新 更多