我正在运行一个同步/批处理作业(synchronizeXXX() ),它在一个长时间运行的事务(>4小时)中使用Hibernate 3.2.5GA /Spring2.5.6在Oracle数据库中插入111821条记录,但在大约4小时后就失败了。2小时/ 50000记录,但有OutOfMemory异常。
虽然我每20次插入一次清除和刷新,但它看起来还是像Hibernate/Websphere/Spring (?)在这个会议上抓住了无数个物体。
有趣的是:内存的使用一开始是正常的,但大约是在之后。20/30分钟,内存使用量开始增加并增长,直到出现OutOfMemory (因为它已被滚动/清除或其他什么原因而没有显示在PDF中)。我尝试将Hibernate从3.2.5升级到3.3.2GA,但问题仍然存在。当我增加最大堆大小时,OutOfMemory只是晚些时候出现。
我搜索并发现了一些类似的问题,但是他们使用Hibernate来管理事务,而不是Spring,所以我想上面提到的修复与我(?)无关。请参阅模拟问题
我分析了堆转储,并使用4.1进行了一些分析。所有结果/屏幕截图和更多细节都包含在PDF中:参见OutOfMemory分析(PDF-586KB)
任何帮助都是非常感谢的!
发布于 2011-04-12 09:45:03
即使您不时地进行清除和刷新,Hibernate会话和事务仍然是开放的,并且看起来并不像在您的情况下那样工作。
这里的选择似乎是:
( a)使用无状态会话:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html
( b)使用SQL查询,使hibernate不能保存任何内容。
( c)使用几个事务
这里没有很好的解决方案,所以只需为您提供最好的选择:
https://stackoverflow.com/questions/5620805
复制相似问题