Hibernate WebSphere6.1中的长事务导致OutOfMemoryException
我正在运行一个同步/批处理作业synchronizeXXX,它使用Hibernate 3.2.5GA/Spring 2.5.6在一个长时间运行的事务中插入111821条记录>4小时,但在大约2小时/50000条记录后失败,出现OutOfMemory异常。 尽管我每隔20次清除并刷新一次插入,但看起来Hibernate/Websphere/Spring仍在会话中保留了大量对象 有趣的是:内存使用最初是正常的,但在大约20/30分钟后,内存使用开始增加,直到OutOfMemory出现,但没有显示在PDF中,因为它已被滚出/清除或其他内容。我尝试从3.2.5升级Hibernate 至3.3.2GA,但仍然存在相同的问题。 当我增加最大堆大小时,OutOfMemory只是在后面出现 我在谷歌上搜索了一下,发现了一些“类似”的问题,但他们用Hibernate而不是Spring来管理事务,所以我想上面提到的修复与我无关。看 我分析了堆转储,并使用IBMSupportAgent4.1进行了一些分析。所有结果/屏幕截图和更多详细信息均包含在PDF中:请参阅Hibernate WebSphere6.1中的长事务导致OutOfMemoryException,hibernate,spring,transactions,websphere,out-of-memory,Hibernate,Spring,Transactions,Websphere,Out Of Memory,我正在运行一个同步/批处理作业synchronizeXXX,它使用Hibernate 3.2.5GA/Spring 2.5.6在一个长时间运行的事务中插入111821条记录>4小时,但在大约2小时/50000条记录后失败,出现OutOfMemory异常。 尽管我每隔20次清除并刷新一次插入,但看起来Hibernate/Websphere/Spring仍在会话中保留了大量对象 有趣的是:内存使用最初是正常的,但在大约20/30分钟后,内存使用开始增加,直到OutOfMemory出现,但没有显示在P
感谢您的帮助 即使您不时执行清除和刷新操作,Hibernate会话和事务仍处于打开状态,并且清除操作在您的情况下似乎无法正常工作 这里的选项似乎是: 使用无状态会话: b使用SQL查询,使hibernate无法保存任何内容 c使用多个事务
这里没有很好的解决方案,所以请为您选择最佳选项:谢谢。c不是我们的选择。如果我在Oracle中生成了密钥序列,是否可以使用?如果是这样,我想我必须自己插入所有成员/集合。顺便说一句:我们正在考虑迁移到PL/SQL,因为现在的性能是惊人的:因为一个大型XML文件的数据已经在Clob中的数据库中,这应该会加快速度。从未使用过无状态会话,但我理解,您必须逐个插入每个元素,从子元素到父元素,这样一切都会按应有的方式结束。将所有内容移动到PL/SQL可能是一个解决方案,但使用b可能允许您使用Java的XML解析功能,同时应该大大减少处理时间并避免缓存问题,只需通过Hibernate.btw发送SQL即可。我使用了另一个transactionmanager一些标准的HibernateTX管理器;我必须在spring配置中查找,viola的内存使用稳定了两个小时!!在这之后,它超时了,但我想这是另一个问题-