大家好,又见面了,我是你们的朋友全栈君。
转自:http://blog.csdn.net/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>
所以,启动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强行中止该线程。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106181.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...