开发者社区> 问答> 正文

tomcat 启动报mysqlJDBC内存溢出,怎么办?

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

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

展开
收起
小旋风柴进 2016-02-29 17:30:06 3145 0
2 条回答
写回答
取消 提交回答
  • 社区爱好者,专为云栖社区服务!

    不错

    2019-07-17 18:50:41
    赞同 展开评论 打赏
  • 这个问题发生的主要原因:**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进行参考。

    2019-07-17 18:50:41
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Apache Tomcat 的云原生演进 立即下载
云服务器ECS内存增强型实例re6全新发布 立即下载
内存取证与IaaS云平台恶意行 为的安全监控 立即下载