停止Tomcat服务的时候,log里面报了不少的内存错误信息。经查询是Tomcat6.0.24以后会检测到的问题。
Summary matrix
Leak cause | Detected by tomcat | Fixed by tomcat | Possible enhancements |
>=6.0.24 | >= 7.0.6 | ||
>=6.0.24 | >= 7.0.6 | ||
Webapp class instance indirectly held through a ThreadLocal value | no | >= 7.0.6 | |
>=6.0.24 | >= 7.0.6 | ||
>=6.0.24 | In 6.0.24-6.0.26 TimerThread are stopped but it may lead to problems. Optional from 6.0.27 with the clearReferencesStopTimerThreads flag. Other threads may be stopped with the clearReferencesStopThreads flag, but it's unsafe. | Fix the application to stop the thread when the application is stopped | |
ContextClassLoader / Threads spawned by classes loaded by the common classloader | >=6.0.24 | In 6.0.24-6.0.26 TimerThread are stopped but it may lead to problems. Optional from 6.0.27 with the clearReferencesStopTimerThreads flag. Other threads may be stopped with the clearReferencesStopThreads flag, but it's unsafe. | Fix the offending code (set the correct CCL when spawning the thread) |
no | >=6.0.24 pre-spawns some known offenders | ||
no | > 6.0.? . Disabled by default with tomcat 7 | ||
> 6.0.? | |||
> 6.0.? | > 6.0.? | ||
> 6.0.? |
还没升级的情况下,比如ThreadLocal的内存泄漏问题,Tomca7中是用ThreadLocalLeakPreventionListener来解决的。
而Tomcat6.0.24以后可以用Context#clearReferencesThreadLocals=true来解决。
参考URL:http://www.atmarkit.co.jp/fjava/rensai4/tomcat7_03/02.html
http://wiki.apache.org/tomcat/MemoryLeakProtection