2013-03-26 58 views
20

當tomcat關閉時,我在catalina.out日誌文件中得到以下消息。我正在使用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. 

第一個聲稱數據源已被強制註銷,因此沒有問題。然而,這很奇怪,因爲我已經配置了這樣的破壞方法:

<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語句取消計時器」的一個。

任何幫助表示讚賞

編輯1: 我試圖通過@Zelldon建議的修正,它擺脫了第一個錯誤。但MySQL Statement Cancellation Timer相關問題仍然存在

+0

可能重複[如何解決內存泄漏問題?](http://stackoverflow.com/questions/10615118/how-to-solve-memory-leak-problems) – OhadR 2016-12-12 12:45:21

+0

請參閱此註釋以瞭解有關MySQL的更多信息取消線程問題。 https://stackoverflow.com/a/46733027/185565 – Whome 2017-10-13 15:16:08

+0

https://stackoverflow.com/a/47019335/3408531 – TiMr 2017-10-30 16:04:06

回答

27

嘗試將sql連接器/驅動程序放在tomcat/lib中,而不是在戰爭中。 因爲每次部署war時,連接器/驅動程序都會被創建,有時垃圾收集器不能刪除它們,這會以內存泄漏結束。所以試着移動tomcat/lib文件夾中的連接器。

請閱讀以下答案:

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

How to configure Tomcat to connect with MySQL

+0

謝謝。看到我編輯的問題 – arahant 2013-03-26 08:27:29

+0

你還使用其他libray的? – Zelldon 2013-03-26 08:35:19

+0

nope。 DataSource是由Tomcat 7提供的。驅動程序來自MySql Connector/J。最重要的是,我有Spring JDBC,但我想這與此問題無關。除此之外,沒有其他數據庫相關的庫。 – arahant 2013-03-26 08:38:34