Для предотвращения утечки памяти Драйвер JDBC был насильственно не зарегистрирован

Я получаю это сообщение, когда я запускаю свое веб-приложение. Это хорошо работает, но я получаю это сообщение во время завершения работы.

СЕРЬЕЗНЫЙ: веб-приложение зарегистрировало драйвер JBDC [oracle.jdbc.driver. OracleDriver], но отказавший для нерегистрации его, когда веб-приложение было остановлено. Для предотвращения утечки памяти Драйвер JDBC был насильственно не зарегистрирован.

Любая справка ценится.

316
задан BalusC 12 October 2011 в 15:07
поделиться

1 ответ

Начиная с версии 6.0.24, Tomcat поставляется с функцией обнаружения утечки памяти, которая, в свою очередь, может привести к появлению подобных предупреждающих сообщений, когда в веб-приложении есть JDBC 4. 0 совместимый драйвер в /WEB-INF/lib webapp, который авто-регистрируется во время запуска webapp, используя ServiceLoader API, но который не авто-дерегистрируется во время закрытия webapp. Это сообщение чисто неофициальное, Tomcat уже предпринял соответствующие действия по предотвращению утечки памяти.

Что вы можете сделать?

  1. Игнорируйте эти предупреждения. Tomcat правильно выполняет свою работу. На самом деле ошибка находится в чужом коде (речь идет о драйвере JDBC), а не в вашем. Радуйтесь, что Tomcat выполнил свою работу правильно, и ждите, пока производитель драйвера JDBC исправит ошибку, чтобы вы могли обновить драйвер. С другой стороны, вы не должны бросать драйвер JDBC в /WEB-INF/lib webapp, а только в /lib сервера. Если вы все еще храните его в /WEB-INF/lib webapp, то вы должны вручную зарегистрировать и отменить его регистрацию с помощью ServletContextListener.

  2. Перейдите на Tomcat 6.0.23 или более старую версию, чтобы вас не беспокоили эти предупреждения. Но он будет молча продолжать утечку памяти. Не уверен, что это полезно знать. Такие утечки памяти являются одной из основных причин OutOfMemoryError проблем во время горячего развертывания Tomcat.

  3. Переместите драйвер JDBC в папку /lib Tomcat и создайте пул данных для управления драйвером. Обратите внимание, что встроенный в Tomcat DBCP не отменяет регистрацию драйверов при закрытии. Смотрите также ошибку DBCP-322, которая закрыта как WONTFIX. Вы скорее хотите заменить DBCP на другой пул соединений, который выполняет свою работу лучше, чем DBCP. Например, HikariCP, BoneCP, или возможно Tomcat JDBC Pool.

295
ответ дан 23 November 2019 в 01:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: