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

Posted

技术标签:

【中文标题】tomcat7 - jdbc 数据源 - 这很可能会造成内存泄漏【英文标题】:tomcat7 - jdbc datasource - This is very likely to create a memory leak 【发布时间】:2013-03-15 22:59:48 【问题描述】:

tomcat 关闭时,我在 catalina.out 日志文件中收到以下消息。我正在使用 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.

第一个声称 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 语句取消计时器”的一个。

感谢任何帮助

编辑 1: 我尝试了@Zelldon 建议的修复程序,它消除了第一个错误。但是MySQL Statement Cancellation Timer 相关问题仍然存在

【问题讨论】:

How to solve memory leak problems?的可能重复 查看此评论以了解有关 MySQL 取消线程问题的更多信息。 ***.com/a/46733027/185565 ***.com/a/47019335/3408531 【参考方案1】:

我遇到了和你一样的问题,我只是将mysql-connector-java的pom版本从8.0.16回滚到8.0.15,问题就解决了,我认为是connector版本不匹配和导致问题的mysql

【讨论】:

【参考方案2】:

可能与 MySQL jdbc 连接器中的此错误有关:http://bugs.mysql.com/bug.php?id=65909。

您可以等待 MySQL 团队修复它,或者您尝试使用与 MySQL 配合良好的 Drizzle JDBC connector(您只需更改 url 连接中的参数),并且在我的测试中,没有有这种bug。

【讨论】:

毛毛雨网站已关闭【参考方案3】:

尝试将sql Connector/Driver放在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

【讨论】:

你也在使用其他的库吗? 不。 DataSource 是 Tomcat 7 提供的。Driver 来自 MySql Connector/J。最重要的是,我有 Spring JDBC,但我想这与这个问题无关。除此之外,没有其他与数据库相关的库。 啊我发现了一些东西请查看以下链接***.com/questions/10615118/…第一行同样的错误,答案是......这是mysql的一个错误bugs.mysql.com/bug.php?id=36565请更新你的mysql连接器jar文件 是的,我也想到了这一点。它更新了连接器 jar,现在可以正常工作了。感谢大家的帮助!

以上是关于tomcat7 - jdbc 数据源 - 这很可能会造成内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

将 JDBC 驱动程序发送到 WAR for Tomcat 7

Tomcat7 新的数据库连接池Tomcat jdbc pool介绍和配置

如何将 .war 文件与 JDBC jar 一起部署在 tomcat7 中?

Java servlet (tomcat) 跟踪到多个数据库的多个 jdbc 连接

如何记录 Tomcat 7 JDBC 连接池、连接创建

tomcat7的数据库连接池tomcatjdbc的25个优势