tomcat7 - JDBC数据源 - 这很可能造成内存泄漏(tomcat7 - jdbc da

2019-07-23 10:51发布

我收到以下消息在catalina.out的日志文件当Tomcat关机。 我使用Tomcat 7.x和Tomcat的JDBC数据源。

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相关的问题仍然存在

Answer 1:

尽量把SQL连接器/驱动器在tomcat / lib目录,而不是战争。 因为每次部署连接器/驱动器将要创建的战争有时垃圾收集器不能删除它们将在内存泄漏结束。 因此,尝试移动连接器上的tomcat的/ lib文件夹。

请阅读以下答案:

为什么一定要JDBC驱动程序在TOMCAT_HOME / lib文件夹放?

如何配置Tomcat来与MySQL连接



Answer 2:

这可能与在MySQL JDBC连接器这个错误: http://bugs.mysql.com/bug.php?id=65909 。

您可以等待MySQL的团队来修复它,或者你尝试使用细雨JDBC连接器与MySQL的正常工作(你只有改变URL连接参数),在我的测试中,并没有这样的的错误。



文章来源: tomcat7 - jdbc datasource - This is very likely to create a memory leak