java - tomcat 启动报mysqlJDBC内存溢出
高洛峰
高洛峰 2017-04-17 11:16:51
[Java讨论组]

严重: 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.

我在本地上运行没问题 ,添加到服务器上就报这个异常 。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
PHP中文网

之前碰到这样的问题,分享一下。


这个问题发生的主要原因:****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的工程师。另也可参考这篇文章:http://www.tomcatexpert.com/blog/2010/04/06/tomcats-new-memory-leak-prevention-and-detection

解决办法:1)无视他,这个问题表示tomcat已经帮你处理掉内存泄露的风险;2)根本性的方法,在需要关闭和重启web应用时,按照tomcat文档指定的shutdown,等待完全关闭后,考虑再行重启;3)代码的建议,对于一些自己能控制的ThreadPool——养成shutdown的习惯,ThreadLocal——养成不用就清除的习惯。其他的一些,可以找一下上面提的那个PPT进行参考。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号