2013-03-26 4 views
20

Я получаю следующие сообщения в файле журнала catalina.out, когда tomcat отключен. Я использую Tomcat 7.x и источник данных Tomcat JDBC.tomcat7 - jdbc datasource - это, скорее всего, создаст утечку памяти

Mar 26, 2013 1:17:52 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc 
SEVERE: The web application [/my_webapp] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 
Mar 26, 2013 1:17:52 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads 
SEVERE: The web application [/my_webapp] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak. 

Первый утверждает, что DataSource был принудительно незарегистрирован, так что это нормально. Однако это странно, потому что я настроил метод уничтожения, например, так:

<bean name="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
    <property name="url" value="jdbc:mysql://localhost:3306/mydb"/> 
    <property name="username" value="root"/> 
    <property name="password" value="password"/> 
</bean> 

Не знаю, почему я получаю второй. Один о «Таймер отмены заявления MySQL».

любая помощь

Edit 1: Я попытался исправить предложенный @Zelldon и он избавляется от первой ошибки. Однако проблема MySQL Statement Cancellation Timer по-прежнему сохраняется

+0

Возможный дубликат [Как решить проблемы с утечкой памяти?] (Http://stackoverflow.com/questions/10615118/how-to-solve-memory-leak-problems) – OhadR

+0

Смотрите этот комментарий, чтобы узнать больше о MySQL Отмена проблемы с выпуском. https://stackoverflow.com/a/46733027/185565 – Whome

+0

https://stackoverflow.com/a/47019335/3408531 – TiMr

ответ

27

Попробуйте установить соединитель/драйвер sql в tomcat/lib, а не на войне. Поскольку каждый раз, когда вы развертываете войну, соединитель/драйвер будет создаваться иногда, сборщик мусора не может удалить их, что закончится утечкой памяти. Поэтому попробуйте переместить разъем в папку tomcat/lib.

Пожалуйста, прочтите следующие ответы:

Why must the JDBC driver be put in TOMCAT_HOME/lib folder?

How to configure Tomcat to connect with MySQL

+0

Спасибо. См. Мой отредактированный вопрос – arahant

+0

вы используете также другие libray? – Zelldon

+0

nope. DataSource - тот, который предоставлен Tomcat 7. Драйвер от MySql Connector/J. Кроме того, у меня есть Spring JDBC, но я думаю, что это не имеет ничего общего с этой проблемой. Кроме этого, нет других библиотек, связанных с базой данных. – arahant

1

Это может быть связано с этой ошибкой в ​​разъеме JDBC MySQL: http://bugs.mysql.com/bug.php?id=65909.

Вы можете дождаться, когда команда MySQL исправит его, или вы попытаетесь использовать Drizzle JDBC connector, который отлично работает с MySQL (вам нужно только изменить параметр в url-соединении), и в моих тестах нет такого рода ошибка.

+0

сайт с дождем вниз – redochka