Я запускаю синхронизирующее / пакетное задание (synchronizeXXX (), которое вставляет 111821 записей в базу данных Oracle, используя Hibernate 3.2.5GA / Spring 2.5.6 в одной длительной транзакции (> 4 часа) но происходит сбой примерно через 2 часа / 50000 записей с исключением OutOfMemory.
Хотя я очищаю и сбрасываю каждые 20 вставок, все равно похоже, что Hibernate / Websphere / Spring (?) Держит в сеансе gazillion объектов.
Самое смешное: использование памяти изначально нормальное, но через ок. 20/30 минут использование памяти начинает увеличиваться и увеличивается до тех пор, пока не возникнет OutOfMemory (не отображается в PDF, потому что он был прокручен / очищен или что-то в этом роде). Я пытался обновить Hibernate от 3.2.5
до 3.3.2GA но та же проблема осталась.
Когда я увеличиваю максимальный размер кучи, OutOfMemory выходит позже.
Я гуглил и обнаружил некоторые «похожие» проблемы, но они использовали Hibernate для управления транзакцией вместо Spring, поэтому я думаю, что упомянутое исправление не относится ко мне (?). См. Проблемы с симуляцией
Я проанализировал дампы кучи и провел некоторый анализ с IBM Support Agent 4.1. Все результаты / снимки экрана и другие подробности включены в PDF : см. Анализ OutOfMemory (PDF, 586 КБ)
Любая помощь приветствуется!