Tomcat常见问题解决 - The web application appears to have started a thread named [FileWatchdog]

现象:

停止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里配置了:


    log4jRefreshInterval
    3000
所以,启动Tomcat的同时启动了一个检测log4j.properties变化的线程,但在1.2.x版本的log4j实现中,这个线程无法被interrupt,所以会出现这个错误。

事实上,这个错误在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强行中止该线程。

参考资料:tomcat filewatchdog but has failed to stop it原因以及解决方法

看美剧,就上 http://www.ustvseries.cn/

你可能感兴趣的:(Tomcat,Log4J,FileWatchdog,Tomcat,Log4J)