Tomcat重启问题
我已配置Tomcat服务器自动重启,但经常出现以下错误:Tomcat重启问题,tomcat,restart,Tomcat,Restart,我已配置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 ve
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重新启动的例外。关闭脚本并没有真正停止tomcat,它只是在tomcat服务器上打开一个端口(如果没有更改server.xml中的默认值,则为8005),告诉它停止,然后退出。Tomcat在退出之前可能还需要一两秒钟来清理。因此,如果您执行类似于
shutdown.sh;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
您需要修复最初的问题,而不是试图绕过症状。运行web应用程序,找出计时器-0正在做什么。它应该指示初始化它的位置。找到那个地方并确保:
ServletContextListener
或类似的程序中停止实际上,上面的第2步应该在启动线程的相同组件中完成(
ServletContextInitializer
,ServletContextListener
,Servlet
,等等).需要尽快了解您的配置。@Soylent-您需要了解哪些配置?您在这个问题上提供的信息很少。我认为如果你提供更多的信息,我们有更好的机会帮助你。您写了“我已经配置了Tomcat服务器”,您是否可以与我们共享有关配置的任何详细信息?上述警告不会阻止您的web应用程序停止。如果线程Timer-0
不是“守护进程”线程,那么它将阻止JVM停止。我必须尝试这个。但是,如果重新启动没有正确进行,并且tomcat在我手动重新启动之前一直处于关闭状态,那么我只会在日志中看到错误行。你可能是对的,但可能的是,Timer-0线程并不总是由应用程序启动。因此,如果它启动,tomcat将等待它终止,这将导致延迟。如果它没有启动(因为您没有使用应用程序中需要它的特性),tomcat就不必等待并更快地退出。