原创

Eclipselink 缓存对象填充内存

温馨提示:
本文最后更新于 2024年04月12日,已超过 37 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

我最近从 Eclipselink 2.6 升级到 4.0.2。我需要更新应用程序以使用雅加达库。在运行大约 24 次后,我的应用程序开始变得非常滞后,并最终收到“java.lang.OutOfMemoryError:超出” GC 开销限制”。

我设置了GC日志,发现内存逐渐减少,直到GC停止释放内存并触发错误。

将内存转储到文件并使用Visual VM后,我看到数百万个“org.eclipse.persistence.internal.indirection”。工作单元 查询值 持有者" 对象和存储项。

我不确定这是否与 Eclipselink 库相关的某种内存泄漏,或者是我的应用程序做错了。我总是在每个事务中释放 EntityManager 对象。我已经运行我的应用程序好几年了,如果有内存泄漏,这是我第一次注意到,这就是为什么我认为一定与软件升级有关。

提前致谢。

在此输入图像描述

在此输入图像描述

更新1:此时服务器非常滞后。我认为它快要崩溃了。在此输入图像描述

在此输入图像描述

我需要重新启动服务器。我再次转储内存。

在此输入图像描述

经过更多研究,我在 Eclipselink 文档中找到了以下信息:在内部,EclipseLink 将持久性单元存储存储在 EclipseLink 会话上,将持久性单元存储存储在 EclipseLink 工作单元上。现在这意味着内存中的那些对象是L1缓存,没有被GC释放?

EclipseLink 文档

正文到此结束
热门推荐
本文目录