gpt4 book ai didi

Java 持久性 (JPA) 堆问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:39:13 24 4
gpt4 key购买 nike

我有一个使用 JPA 在 Glassfish 上运行的简单 EAR 应用程序。它从我的 Oracle 数据库表中读取记录并处理它们。处理后,它们在数据库中被标记为如此,然后我在实体管理器上调用 clear() 以便可以分离处理过的对象并对其进行 GC。然而,即使自从我们添加了 clear() 堆使用量减少后,整体堆仍在增加并最终达到最大堆。没有其他可能导致泄漏的物体,我不知道我还能做些什么。我们还关闭了 JPA 缓存。

<property name="eclipselink.cache.shared.default" value="false"/>

有谁知道我还能做些什么来确保没有保留 JPA 对象?它可能与交易有关吗?每次更新要处理的最后一批记录时,我们都会使用一个新事务。

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

如有任何建议,我们将不胜感激。我知道我可以分析应用程序,但很难看到问题,即使我看到它是一些未被收集的 JPA 对象,我不确定在一次清理实体方面我遗漏了什么不再需要它们。

詹姆斯

最佳答案

使用 JProfiler 等内存分析器是您的最佳解决方案。

否则尝试缩小发生内存泄漏的位置。尝试删除处理的每个部分,直到找到罪魁祸首。

您是否会随着时间的推移耗尽内存,或者您正在处理最终耗尽内存的大事务?

确保您没有任何东西捕获您正在处理的对象。也许包括你的一些代码。你会做任何复杂的查询吗?

关于Java 持久性 (JPA) 堆问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4757622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com