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

我已配置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重新启动的例外。关闭脚本并没有真正停止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正在做什么。它应该指示初始化它的位置。找到那个地方并确保:

  • 线程以daemon=true启动
  • 线程在
    ServletContextListener
    或类似的程序中停止

  • 实际上,上面的第2步应该在启动线程的相同组件中完成(
    ServletContextInitializer
    ServletContextListener
    Servlet
    ,等等).

    需要尽快了解您的配置。@Soylent-您需要了解哪些配置?您在这个问题上提供的信息很少。我认为如果你提供更多的信息,我们有更好的机会帮助你。您写了“我已经配置了Tomcat服务器”,您是否可以与我们共享有关配置的任何详细信息?上述警告不会阻止您的web应用程序停止。如果线程
    Timer-0
    不是“守护进程”线程,那么它将阻止JVM停止。我必须尝试这个。但是,如果重新启动没有正确进行,并且tomcat在我手动重新启动之前一直处于关闭状态,那么我只会在日志中看到错误行。你可能是对的,但可能的是,Timer-0线程并不总是由应用程序启动。因此,如果它启动,tomcat将等待它终止,这将导致延迟。如果它没有启动(因为您没有使用应用程序中需要它的特性),tomcat就不必等待并更快地退出。