tomcat6 报告内存泄漏的原因

错误示例:

严重: The web application [/flex_vod] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@793ae954]) and a value of type [flex.messaging.client.FlexClient] (value [flex.messaging.client.FlexClient@2f35d7ad]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
2011-3-16 10:40:26 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap

 

原因分析:

查了很多资料都没有给出明确说法,最后通过在他的FAQ找到说明了。

应该是tomcatbug,建议稳定版上tomcat7吧,我查看了tomcat6changelog ,tomcat6.0.29以后修改了NBUG,

 

关于内存泄漏检测在tomcat FAQ上的大致描述如下:

Tomcat6.0.24 - 6.0.26在关闭和重载时检测到内存泄漏通过修改ThreadLocalMap代码清除关联的线程实例把内存释放了,但是后来又觉得不安全实现不理想,这点通过看tomcat6changelog也能发现基本6.0.27之后的每一个本版都在内存泄漏的处理上进行或多或少的改进(当然也改进因此导致的一些bug,如jdbcdbcp相关联的bug,但是在tomcat7.0.6之后通过对线程池机制进行更新把该bug彻底解决了。

 

关于内存泄漏解决详细描述参考其FAQ:

http://wiki.apache.org/tomcat/MemoryLeakProtection?highlight=%28failed%29%7C%28but%29%7C%28remove%29%7C%28it%29%7C%28to%29

 

部分描述:

The leak is caused because we have a custom class for the ThreadLocal instance, and also a custom class for the value bound to the Thread. Actually the important thing is that both classes were loaded by the webapp classloader.

Hopefully tomcat 6.0.24 can detect the leak when the application is stopped: each Thread in the JVM is examined, and the internal structures of the Thread and ThreadLocal classes are introspected to see if either the ThreadLocal instance or the value bound to it were loaded by the WebAppClassLoader of the application being stopped.

In this particular case, the leak is detected and a message is logged. Tomcat 6.0.24 to 6.0.26 modify internal structures of the JDK (ThreadLocalMap) to remove the reference to the ThreadLocal instance, but this is unsafe (see #48895) so that it became optional and disabled by default from 6.0.27. Starting with Tomcat 7.0.6, the threads of the pool are renewed so that the leak is safely fixed.

 

 

Tomcat 6 change log地址:

http://tomcat.apache.org/tomcat-6.0-doc/changelog.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值