zoukankan      html  css  js  c++  java
  • 解决 Tomcat reload WARNING [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [] registered the JDBC driver [com.mysql.jdbc.Driver] but fail

    转自:http://www.cnblogs.com/interdrp/p/5632529.html

    我的错误如下:

    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)

    原文:

    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 unregistered

    出现条件:web应用,使用spring,连接池用的bonecp。当修改一点代码,save后,spring会重新加载,然后问题就出现了。

    在网上查看资料后,找到了该报告:https://issues.apache.org/jira/browse/DBCP-332 

    原文引用:

    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:

    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.

    翻译:

    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配置中,加入了该配置。

  • 相关阅读:
    《Code Complete》第一部分纪要
    深入理解Java虚拟机-JVM内存管理的猜测
    成长经验系列之三-猜想-技术未来
    深入理解Java虚拟机-第三版-前言及第一章笔记
    float与double的精度问题
    成长经验系列之二-方法-成长分享
    工作可能用的一些网站(不定时更新)
    Walkthrough: Write your first client script
    Make a Field Required in a Dynamics CRM Dialog / PowerApps
    Refresh Power BI Dataset programmatically from Dynamics 365 CRM/PowerApps
  • 原文地址:https://www.cnblogs.com/kxxx/p/5848348.html
Copyright © 2011-2022 走看看