解決 Tomcat reload WARNING [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.cl

轉自:http://www.cnblogs.com/interdrp/p/5632529.htmlhtml

個人錯誤以下:java

06-Sep-2016 18:57:10.595 WARNING [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [] 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.
06-Sep-2016 18:57:10.598 WARNING [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
java.lang.Object.wait(Native Method)
java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:142)
com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:43)
06-Sep-2016 18:57:10.598 WARNING [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:502)
java.util.TimerThread.mainLoop(Timer.java:526)
java.util.TimerThread.run(Timer.java:505)mysql

 

原文:web

01-Jul-2016 10:49:05.875 WARNING [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [ROOT] 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 unregisteredspring

 

出現條件:web應用,使用spring,鏈接池用的bonecp。當修改一點代碼,save後,spring會從新加載,而後問題就出現了。sql

 

在網上查看資料後,找到了該報告:https://issues.apache.org/jira/browse/DBCP-332 apache

原文引用:tomcat

BasicDataSource's method close() doesn't deregister JDBC driver. This causes permgen memory leaks in web server environments, during context reloads. For example, using Tomcat 6.0.26 with Spring, and BasicDataSource declared in Spring context, there is a message printed at web application reload:app

SEVERE: A web application registered the JBDC 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.oop

 

翻譯:

BasicDataSource中的close方法沒有註銷(deregister)jdbc驅動。在web server環境中,當reload content時,就引發了堆內存泄露(permgen memory leaks)。例如,當在使用spring和tomcat  6.0.26時,BasicDataSource在Spring context被聲明瞭,這樣就會有一條信息在web application reload的時候: SEVERE: A web application registered the JBDC 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.

 

該地址中 https://issues.apache.org/jira/browse/DBCP-332 提供了一種解決方案。

我並無使用該方案,由於使用的是bonecp,因此我看了下bonecp的BoneCPDataSource的close方法,發現,其中有個 BoneCPConfig類,其中有這個屬性:deregisterDriverOnClose。 因而我在spring的xml配置中,加入了該配置。

相關文章
相關標籤/搜索