首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tomcat没有完全关闭(Tomcat 9.0.31)

Tomcat没有完全关闭(Tomcat 9.0.31)
EN

Server Fault用户
提问于 2020-06-12 04:59:44
回答 2查看 7.7K关注 0票数 2

我们正在将应用程序从Websphere迁移到Tomcat。我注意到的一件事是,当我为Tomcat发布shutdown.sh时,进程仍然在运行。一开始我以为这个过程会很快结束,但即使在5分钟后,我仍然能看到这个过程。因此,我必须使用kill -9终止这个过程,然后再开始。

在关闭时,我确实看到许多错误被抛到控制台上,例如:

代码语言:javascript
复制
org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [some_application] appears to have started a thread named [Timer-0] but has failed to stop it.

该代码由webapps组成,这些应用由servlet、spring和大量线程在应用程序启动时启动。

有什么我可以做的配置,以解决这个问题吗?或者这需要一些代码工作来弥补WebSphere提供的一些现成的东西?

EN

回答 2

Server Fault用户

发布于 2020-06-12 09:20:39

这样的问题最好通过代码来处理。

尽管无论如何都可以使用catalina.sh stop -force来终止Tomcat实例,但这里的要点是Tomcat认为这些线程运行是有原因的,而终止线程可能会使应用程序处于不一致的状态(例如,如果它在编写过程中被终止)。

如果您知道不可能发生这样的事情,请在停止Tomcat时使用-force开关。

但是,最好编写应用程序,将线程标记为守护进程(通过在setDaemon(true)实例上调用Thread ),以便在VM退出时终止线程,或者(如果线程在任何时候不应该被杀死)通过实现ServletContextListener注册关闭钩子,并在contextDestroyed方法中执行关机杂务。这是有关安装关机钩子的StackOverflow问题。

票数 4
EN

Server Fault用户

发布于 2020-06-14 19:01:13

您的应用程序可能正在运行一堆非守护进程线程,因此它永远不会关闭。

您在问题中提到的线程是一个TimerThread,Tomcat知道如何安全地关闭这些线程。只需将clearReferencesStopTimerThreads="true"添加到应用程序上下文:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="yourAppName"
         clearReferencesStopTimerThreads="true" />

然而,正如莱切克所提到的,处理这些问题的正确方法是通过ServletContextListener或另一种机制来管理Thread的S生命周期。由于您使用的是Spring容器,所以我会向您的ApplicationContext中添加一个TaskScheduler (<task:scheduler id="" pool-size="" />),并将其注入每个需要调度任务的bean中。如果您的servlet需要调度任务,那么在ServletContextListener中创建一个ScheduledExecutorService并在ServletContext中存储对它的引用。

PS:还有一个clearReferencesStopThreads属性,但是Apache配置手册中的描述应该提示您何时使用它:

如果为真,Tomcat将尝试终止web应用程序启动的线程。停止线程是通过不推荐的(有充分理由的) Thread.stop()方法执行的,并且很可能导致不稳定。因此,使之成为开发环境中的最后一种选择,在生产环境中是不建议的。如果未指定,则将使用false的默认值。如果启用了此功能,web应用程序可能需要更长的2秒才能停止,因为在对任何剩余线程调用Thread.stop()之前,执行器线程最多需要2秒才能优雅地停止。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1021145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档