论坛首页 Java企业应用论坛

升级 Tomcat 6.0.24+ 享用内存溢出警告

浏览 4587 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-12-09  

 

项目需要对Tomcat下部署的context做reload,实际效果很差,期间发生PermGen内存溢出。

记得Tomcat6.0.24开始提供内存溢出提示:

 

http://wiki.apache.org/tomcat/MemoryLeakProtection

 

6.0.24开始提供溢出log

6.0.25开始在manager提供 Find Leaks 按钮 —— 其实这按钮意义不大,有价值的信息全在log里了

 

 

果断升级,从tomcat6.0.16升到6.0.29,测试果然发现内存泄漏警告

 

其中一条:

 

严重: The web application [/batch] created a ThreadLocal with key of type [null] (value [ch.qos.logback.core.UnsynchronizedAppenderBase$1@ca95d6]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
 

 

使用的logback版本0.9.21,存在ThreadLocal泄漏,查看最新版本的logback专门提示修复了bug

 

http://logback.qos.ch/news.html  9.0.26版本fix

 

http://jira.qos.ch/browse/LBCLASSIC-183 bug描述

 

升级后问题解决

 

JDBC的泄漏Tomcat会自动解决,虽然有警告,可以无视(同时Tomcat log的错字...)

严重: The web application [/batch] registered the JBDC 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.
 

 

 

目前遗留了DBCP(Ver 1.3 1.4都存在)的泄漏问题

 

https://issues.apache.org/jira/browse/DBCP-332

 

声称在1.3.1、1.4.1版本修复,不知何时release

 

总结:

从版本号上也能看出来,这功能不怎么重要,tomcat团队也没好意思做多少推广,JreMemoryLeakPreventionListener实现的内存泄漏检测还停留在reload级别上,实际运行的泄漏依然需要profile调试。


 

   发表时间:2010-12-09  
请问楼主,我用的是apache-tomcat-6.0.14解压缩版本
这个版本的log不会报内存溢出异常吗?
最近经常出现Tomcat假死现象,服务正常,Tomcat没响应,log也不报错,不知道什么情况
0 请登录后投票
   发表时间:2010-12-09  
RonQi 写道
请问楼主,我用的是apache-tomcat-6.0.14解压缩版本
这个版本的log不会报内存溢出异常吗?


6.0.24开始提供log报错功能,仅限于reload、stop时检测。

RonQi 写道
最近经常出现Tomcat假死现象,服务正常,Tomcat没响应,log也不报错,不知道什么情况


字面意思太深奥,假死、服务正常、没响应、不报错....

推断你的意思是Tomcat无响应但log不报错吧,优先看启动参数,heap size 和PermSize有没有给够,再不行就jprofile、jvisualvm调试,坛子里有不少相关文章可以参考。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics