转自:http://blog.youkuaiyun.com/ego_ecust/article/details/65442622?locationNum=4&fps=1
现象:
停止Tomcat时,catalina.log里输出提示信息:
SEVERE: The web application [/xxx] appears to have started a thread named [FileWatchdog] but has failed to stop it. This is very likely to create a memory leak.
原因:
导致这个错误的原因是在web.xml里配置了:
- <context-param>
- <param-name>log4jRefreshInterval</param-name>
- <param-value>3000</param-value>
- </context-param>
事实上,这个错误在2002年的时候就出现了,只不过一直没有被修复,详情可参考:
ASF Bugzilla – Bug 4913 org.apache.log4j.helpers.FileWatchdog should allow external interrupt()
log4j官方原先计划在1.3版本中修复,但后来,就没有后来的1.3版本了,直接到了2.x版本。1.2.x版本和2.x版本之间不兼容,无法平滑升级。
解决办法:
1、将log4j升级到2.x版本;
2、去掉自动检测这个配置(事实上95%以上的场景都没有必要);
3、自己写个ServletContextListener强行中止该线程。