严重: Error listenerStart
2013-12-17 9:13:57 org.apache.catalina.core.StandardContext start
严重: Context [] startup failed due to previous errors
2013-12-17 9:13:57 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
严重: The web application [] 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.
我在本地上运行没问题 ,添加到服务器上就报这个异常 。
这个问题发生的主要原因:**tomcat没有正常关闭。
详细信息:好像是在tomcat 6.0.24版本(具体的版本可去tomcat官网确认一下)之后,加入了一个memory leak listener(JreMemoryLeakPreventionListener,有兴趣可详细查去源码), 在tomcat stop、undeployed、reloaded的时候,他会检测当前应用的classloader,查看是否有引用泄露(tomcat定义了一系列的引用泄露规则:threadlocal保持引用,线程池保持引用,驱动注册等),如有引用泄露,则提示错误,可参考网上的一个ppt: Diagnosing and Fixing Memory Leaks in Web Applications: Tips from the Front Line,作者是tomcat的工程师
解决办法:1)无视他,这个问题表示tomcat已经帮你处理掉内存泄露的风险;2)根本性的方法,在需要关闭和重启web应用时,按照tomcat文档指定的shutdown,等待完全关闭后,考虑再行重启;3)代码的建议,对于一些自己能控制的ThreadPool——养成shutdown的习惯,ThreadLocal——养成不用就清除的习惯。其他的一些,可以找一下上面提的那个PPT进行参考。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。