Проблема с сохранением Java (JPA) - PullRequest
3 голосов
/ 21 января 2011

У меня есть простое приложение EAR, работающее на Glassfish с использованием JPA. Он читает записи из моей таблицы БД Oracle и обрабатывает их. После обработки они помечаются как таковые в базе данных, и я затем вызываю clear () в менеджере сущностей, чтобы обработанные объекты можно было отделить и GC'ed. Тем не менее, несмотря на то, что мы добавили использование кучи clear (), общая куча все еще увеличивается и в итоге достигает максимальной кучи. Других предметов, которые могут вызвать утечку, нет, и я понятия не имею, что еще я могу сделать. У нас также отключен кеш JPA.

<property name="eclipselink.cache.shared.default" value="false"/>

Кто-нибудь знает, что еще я могу сделать, чтобы убедиться, что нет объектов JPA? Может быть это как-то связано с транзакциями? Мы используем новую транзакцию каждый раз, когда обновляем последнюю партию записей для обработки.

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

Любые предложения приветствуются. Я знаю, что могу профилировать приложение, но довольно трудно увидеть проблему, и даже если я это сделаю, я ожидаю, что это будут некоторые объекты JPA, которые не собираются, и я не уверен, что мне не хватает в плане очистки сущностей один раз они больше не требуются.

Джеймс

1 Ответ

2 голосов
/ 24 января 2011

Лучшим решением является использование профилировщика памяти, такого как JProfiler.

В противном случае попытайтесь сузить область утечки памяти.Попробуйте удалить каждую часть вашей обработки, пока не найдете виновника.

У вас не хватает памяти с течением времени, или вы обрабатываете одну большую транзакцию, которая в конечном итоге заканчивается памяти?вы ничего не держите за объекты, которые вы обрабатываете.Возможно, включите часть вашего кода.Вы делаете какие-либо сложные запросы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...