【发布时间】:2013-08-17 16:46:02
【问题描述】:
我在 Hibernate 会话中遇到内存泄漏。
一个长时间运行的线程不断地加载和更新数据。虽然线程定期调用entityManager.clear(),但我同时观察到:
1.) Session-size 的增长(自应用开始以来的线性增长)
2.) 执行时间的增长(自应用程序开始以来呈指数增长)
似乎有帮助的唯一方法是close() entitymanager 并重新打开它。我在几个未连接的应用程序中看到了这种行为,一些使用 spring,一些没有,一些使用 jpa-frontend,一些使用本地 hibernate。
很奇怪:虽然我从来没有遇到过没有这个问题的休眠应用程序,但在互联网上搜索却是一片空白。我(以及其他数十名开发人员)做错了什么?
【问题讨论】:
-
休眠会话不应运行 长时间 时间,它应该在镜头循环中关闭。
-
休眠会话绑定到实体管理器,我找不到将不同的会话放入 em 的可能性。同时,实体管理器绑定到正在运行的线程(至少:Spring 是这样说的)。那么:使用休眠会禁止长时间运行的线程吗?
-
怎么绑定的?你是从 Spring 获得的吗?
-
是的,使用 SpringEntityManagerFactoryUtils(至少在其中一个应用程序中)
标签: java hibernate memory-leaks hibernate-entitymanager