当前位置: 首页 > 面试题库 >

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

蒯宇定
2023-03-14
问题内容

当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已被强制取消注册,这样很好。但是,这很奇怪,因为我已经像这样配置了destroy-method:

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


问题答案:

尝试将sql Connector / Driver放在tomcat /
lib中,而不是放在战争中。因为每次部署战争时都会创建连接器/驱动程序,所以有时垃圾收集器无法删除它们,而这将导致内存泄漏。因此,请尝试将连接器移至tomcat
/ lib文件夹中。

请阅读以下答案:

为什么必须将JDBC驱动程序放在TOMCAT_HOME /
lib文件夹中?

如何配置Tomcat与MySQL连接



 类似资料:
  • 问题内容: 我配置了tomcat以使用其他外部开源。 但是,在tomcat运行几分钟后,我得到: 是什么原因造成的? 我要去哪里看?可能是Tomcat上的数据池吗? Tomcat中的线程是什么意思? 已编辑 这是我的全部踪迹。该应用程序似乎在仍在运行时会重新加载其上下文-我不知道为什么! 问题答案: 消息实际上很清楚:某些东西创建了一个类型为type的值-这是一个很好的提示。这很可能意味着框架本身

  • 我正在编写一个spring boot 2应用程序,我正在使用SQL批量复制功能在SQL Server2012数据库中插入几条记录。每插入700行,我就有600 MB的泄漏 我已经试用了Microsoft驱动程序版本6.4.0.jre8和7.2.2.jre8,但任何东西都改变了。我尝试为tomcat更改Hikari连接池,但结果是一样的。 为了调用Microsoft API,我使用了包装器框架(ht

  • WebAppClassLoader clearThreadLocalMap 严重:web应用程序[]创建了一个ThreadLocal,其键类型为[com.sun.xml.bind.v2.runtime.Coordinator$1],值类型为[com.sun.xml.bind.v2.runtime.Coordinator[]],但在web应用程序停止时未能删除它。这很有可能造成内存泄漏。 它显示了三

  • 我有一个在Tomcat7上运行的web应用程序的问题。 当我尝试重新启动web应用程序时,我在servlet内部创建的线程打开的端口仍然是打开的。 “http-bio-8080-acceptor-0”后台进程prio=10 tid=0x00007F4ED4206000 nid=0x71f0 runnable[0x00007F4ECC78F000]java.lang.thread.state:run

  • 问题内容: 好的,所以我的程序有很多(〜300)线程,每个线程都与中央数据库通信。我创建了一个与数据库的全局连接,然后每个线程进行其业务创建语句并执行它们。 一路上的某个地方,我发生了大量内存泄漏。在分析堆转储之后,我看到com.mysql.jdbc.JDBC4Connection对象为70 MB,因为它在“ openStatements”(哈希映射)中有800,000个项目。在某个地方,它不能正

  • 问题内容: 由于Tomcat中的孤立线程,我遇到了内存泄漏。特别是,Guice和JDBC驱动程序似乎没有关闭线程。 我知道这与其他问题,但是就我而言,“不必担心”的答案是不够的,因为它给我带来了麻烦。我的CI服务器会定期更新此应用程序,重新加载6-10次后,由于Tomcat内存不足,CI服务器将挂起。 我需要能够清理这些孤立的线程,以便可以更可靠地运行CI服务器。任何帮助,将不胜感激! 问题答案: