启动tomcat8提示内存泄漏问题解决

故障起源

今天启动tomcat8,发现网址访问不了,网页提示:

HTTP Status 404 - /web/
message /web/
description The requested resource is not available.

tomcat8

于是打开catalina.out查看日志。

26-Oct-2015 11:23:26.735 WARNING [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [web-0.0.1-SNAPSHOT] 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)
26-Oct-2015 11:23:26.737 WARNING [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [web-0.0.1-SNAPSHOT] appears to have started a thread named [Druid-ConnectionPool-Create-2108774764] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
java.util.concurrent.locks.AbstractQueuedSynchronizerConditionObject.await(AbstractQueuedSynchronizer.java:2039)com.alibaba.druid.pool.DruidDataSourceCreateConnectionThread.run(DruidDataSource.java:1868)


tomcat7

于是换成了tomcat7再尝试一番。还是报错,报错信息大同小异。

2015-10-26 14:21:07 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
严重: The web application [/web] 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.


意思是:注册了com.mysql.jdbc.Driver以后当应用停止时无法注销,为了防止内存泄漏,jdbc驱动被强制注销。

这种错误,是由于从tomcat6.0.24版本开始,在server.xml中增加了对内存泄漏的检测。

解决方法有两种:
[list]
[*]把server.xml的把这个监听去掉
[*]另一个方法是换成6.0.24版本以下的tomcat(比如6.0.20)
[/list]
但是我尝试把server.xml的listener去掉不行,报错依旧。

tomcat6.0.20

tomcat6.0.20

…javax.servlet-api-3.0.1.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

tomcat6终于不报这个错误了,但是由于servlet版本的问题报了另一个错误。

最后终于搞定,发现并不是这个错误导致网址访问不了,而是另外一个错误(连接不上数据库主机),这个错误并不是看catalina.out,而是要看localhost.2015-10-27.log:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘dataSource’ defined in file [/web/webapps/web/WEB-INF/classes/spring/spring-context-datasource.xml]: Invocation of init method failed; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Caused by: java.net.ConnectException: Connection timed out

总结

当发现tomcat提示内存泄漏错误,有三种解决方法:

[list]
[*]如果能解决掉内存泄漏最好,即使是误报也尽量修改掉
[*]把tomcat的listener注释掉
[*]换6.0.20以下的版本
[/list]
另外需要注意的是,这种报错并不影响应用的启动,如果启动不了,那需要查找别的原因。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值