我已经配置了Tomcat服务器自动重启,但我经常遇到以下错误:
Dec 10, 2013 5:30:32 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
**SEVERE**: The web application [/Xyz/Abc] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak.
这个例外不会让tomcat重启,因此我的应用程序就会停止。
提前致谢。
答案 0 :(得分:1)
我认为它不会阻止tomcat重启。您的关闭脚本并没有真正停止tomcat,它只是在tomcat服务器上打开一个端口(如果你没有更改server.xml中的默认值,则为8005),告诉它停止,然后退出。在退出之前,Tomcat可能仍需要一两秒才能清理。因此,如果在重新启动脚本中执行类似shutdown.sh; startup.sh
的操作,则启动的tomcat可能希望绑定到上一个tomcat尚未发布的端口。在关机和启动之间设置sleep 5
应解决此问题。
这是我最近在遇到同样问题时编写的代码:
instdir=/usr/lib
port=8443
$instdir/tomcat/bin/shutdown.sh
tries=0
while netstat -anf inet | grep '\*\.'$port > /dev/null
do
tries=`expr $tries + 1`
test $tries -ge 12 && break
sleep 5
done
if test "$tries" -ge 12
then
echo "Could not stop tomcat, port $port still in use"
exit 1
fi
$instdir/tomcat/bin/startup.sh
答案 1 :(得分:0)
您需要修复原始问题,而不是尝试解决症状。运行您的Web应用程序并找出Timer-0
正在做什么。这应该表明它被初始化的位置。找到那个地方并确保以下内容:
ServletContextListener
或类似的实际上,上面的#2应该在启动线程的同一个组件中完成(ServletContextInitializer
,ServletContextListener
,Servlet
等。)