WLS: Утечка соединений – неактивные сессии не закрываются, несмотря на таймаут неактивного соединения.

Вопрос или проблема

У меня есть веб-приложение на Java, которое работает с следующей конфигурацией:

  • Веб-приложение на Java
  • Oracle WebLogic (14.1.1.)
  • Oracle Database

Мы заметили, что у пользователя БД (схема) похоже утекли соединения – количество неактивных сеансов (до нескольких тысяч) не закрывается.

Пул соединений имеет настроенную емкость 100. (не 1000) Спустя некоторое время необходимо перезапустить экземпляр приложения WebLogic, чтобы освободить ресурсы.

Я проверил конфигурацию источника данных и нашел ‘Inactive Connection Timeout‘. Даже когда это включено (например, установлено на 60), кажется, что это не влияет на утечку ресурсов (в противоположность тому, что говорится в описании).

Мой вопрос: что еще я могу сделать, чтобы закрыть неактивные соединения? Со стороны источника данных или WebLogic?

PS: Я не могу непосредственно изменить приложение. Но я декомпилировал его и нашел место, где происходит утечка доступа к БД (похоже, это один метод) – но в нем предусмотрено правильное закрытие соединения (нормальное и для исключений, это .getVendorConnection()).

Ответ или решение

Утечки соединений в WebLogic Server: Решение проблемы с неактивными сессиями

Ваша ситуация с утечками соединений в Oracle WebLogic Server (WLS) требует внимательного анализа и эффективного подхода к ее разрешению. Ниже приведены ключевые аспекты и рекомендации для устранения этой проблемы.

1. Проверка конфигурации пула соединений

Первое, что следует сделать — это пересмотреть конфигурацию пула соединений. Вы упомянули, что у вас установлен лимит в 100, что вполне разумно. Важно убедиться, что параметры пула настроены правильно:

  • Максимальное количество соединений: Убедитесь, что значение не превышает 100, чтобы предотвратить превышение лимита.
  • Inactive Connection Timeout: Параметр, задающий время неактивности соединения перед его закрытием, действительно должен работать. Ваша установка на 60 секунд — это хороший старт. Однако стоит обратить внимание на другие связанные параметры.

2. Настройки "Connection Pooling"

Дополнительно проверьте:

  • Test Connection on Reserve: Включите эту опцию, чтобы WLS проверял активность соединения перед его выдачей. Это может существенно снизить количество неактивных соединений, которые остаются открытыми.
  • Test Connection on Create: Эта настройка будет форсировать проверку соединения при его создании. Если соединение не активно, оно не будет добавлено в пул.

3. Логи и мониторинг соединений

Включите детальное логирование и мониторинг соединений:

  • Oracle WebLogic Logging: Откройте отладочные логи для получения более подробной информации о соединениях и их состоянии. Это поможет выявить любые сбои или ошибки, связанные с соединениями.
  • JMX мониторинг: Используйте JMX для отслеживания состояния пула соединений в реальном времени. Это даст вам представление о том, сколько соединений активно, и как долго они были неактивными.

4. Оптимизация управления ресурсами

Если приложение некорректно закрывает соединения:

  • Проверьте логику управления соединениями в коде, где происходит работа с базой данных. Пользуйтесь try-with-resources для автоматического закрытия Connection, Statement и ResultSet, если это возможно.
  • Если доступ к коду ограничен, попробуйте отправить запрос разработчикам для улучшения обработки соединений в проблемной зоне.

5. Рассмотрение дополнительной конфигурации

  • Выборочная очистка соединений: Настройте систему очистки в WebLogic, чтобы периодически проверять неактивные соединения и закрывать их. Это можно сделать через Connection Pool и параметры Connection Testing.

Заключение

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

Если проблема не решается с помощью вышеперечисленных шагов, возможно, стоит рассмотреть возможность обращения к поддержке Oracle за специализированной помощью и дополнительными инструментами для диагностики.

Профессиональный подход и регулярный мониторинг помогут избежать проблем с неактивными соединениями и сохранить производительность вашей системы.

Оцените материал
Добавить комментарий

Капча загружается...