【发布时间】:2015-06-04 19:28:19
【问题描述】:
我用谷歌搜索过stackoverflow,但找不到答案。
我有一个 Maven、Spring MVC Web 应用程序,它连接到 MySQL 数据库。
问题是每次我重新部署(停止、取消部署然后部署)我的 war 文件时,我都会在日志文件中得到以下异常:
SEVERE: The web application [/XYZ-0.0.0] 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.
SEVERE: The web application [/XYZ-0.0.0] 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.
+-5 重新部署后,我收到 java.lang.OutOfMemoryError: PermGen space 错误,必须重新启动 Tomcat - 有时我必须重新启动我的机器。
我查看过:To prevent a memory leak, the JDBC Driver has been forcibly unregistered 并尝试了选项 3(不确定 如何 或 what 移动到 Tomcat 的 /lib 目录,即,我是否move' spring-jdbc 还是 mysql-connector-java?)
我已经实现了一个连接池来试图解决这个问题,但它没有帮助。
我使用 Netbeans,但我安装了 Tomcat 7 的“windows 版本”,即没有 catalina.bat 文件的版本,因此我无法启动并运行分析器。 (我不想重新安装Tomcat...)
请帮助 - 我如何找到并修复内存泄漏?
【问题讨论】:
-
您需要将
classesToInitialize="com.mysql.jdbc.NonRegisteringDriver"添加到 server.xml 中的侦听器声明中。请看stackoverflow.com/questions/24850091/… -
谢谢 ksokol,我已经尝试过了(将 mysql-connector-java-5.1.30.jar 移动到 Tomcat 7.0\lib\ 并在我的 pom 中将其标记为
provided并编辑了server.xml 文件),但当我部署、使用 webapp、停止和取消部署时,Tomcat 仍然会警告内存泄漏。 -
我注意到几分钟后内存“消失”了,即如果我点击
Find leaks并发现泄漏,然后等待几分钟并再次单击它没有泄漏...
标签: java mysql spring-mvc memory-leaks tomcat7