Есть ли у кого-нибудь хорошие советы по устранению утечек соединения на GlassFish?
В настоящее время я отлаживаю сервер GlassFish, который содержит приложение, в котором время от времени происходят утечки памяти, что в конечном итоге приводит к необходимости перезапуска сервера для освобождения пула (очистка пула доступна только в Glassfish 3, как мне сказали).
Когда я сегодня отлаживаю подобные ошибки, я просматриваю журнал сервера примерно в то время, когда я вижу, что наш мониторинг сообщил, что пул увеличился, и смотрю, есть ли какие-либо интересные ошибки или подобные ошибки в этот момент.
Есть ли у кого-нибудь лучшие способы устранения подобных проблем?
Все приложения являются EJB / EAR, которые используют аннотации для вставки источников данных. Затем приложения используют источник данных для установления соединения. Конечно, каждое соединение должно быть закрыто программистами, но я думаю, что здесь кто-то забыл об этом.
Я думаю, что хороший способ отслеживания утечек памяти - это прикрепить VisualVM к запущенному процессу Java (в данном случае к экземпляру GF) и посмотреть в справочное дерево дампов кучи.
Другой способ, который приходит мне в голову, но требует некоторой работы, - это написать свою собственную оболочку пула соединений / соединений и регистрировать трассировку стека каждый раз, когда соединение берется из пула, а также закрывается.
Вы можете настроить параметры «Устранение утечек соединения» для пулов соединений и получить полную трассировку стека с указанием основных причин в журнале сервера.
См. Страницу документации - http://docs.oracle.com/cd/E19879-01/820-4335/geveg/index.html.