我在我的系统上安装了tomcat 9.0.14(Windows 10,Windows server 2016 R2) 我在启动 tomcat 服务时没有任何问题(在 2-3 秒内启动)。 然而,需要1分钟才能停止。 我认为我驻留在 webapps 下的项目之一需要时间,所以我删除了所有项目,但结果是相同的。 之后,我将其清空 webapps 文件夹以进一步检查 tomcat 仍然花了 1 分钟才停止。 我检查了日志文件,没有错误。Tomcat 停止时空闲了 1 分钟。
Common-deamon.log-------
[2019-01-08 16:30:02] [info] [13948] Stopping service...
[2019-01-08 16:30:03] [info] [13948] Service stop thread completed.
[2019-01-08 16:31:03] [info] [ 1940] Run service finished.
[2019-01-08 16:31:03] [info] [ 1940] Commons Daemon procrun finished
catalina.log--------
08-Jan-2019 16:30:02.399 INFO [Thread-6] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
08-Jan-2019 16:30:02.431 INFO [Thread-6] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"]
08-Jan-2019 16:30:02.453 INFO [Thread-6] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
08-Jan-2019 16:30:02.453 INFO [Thread-6] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
08-Jan-2019 16:30:02.453 INFO [Thread-6] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"]
他们有什么方法可以减少 tomcat 9 的浸泡时间吗? 在 tomcat 8 中停止时间为 3-5 秒 任何帮助表示赞赏......
我可以通过
重现这个apache-tomcat-9.0.14-windows-x64.zip
apache-tomcat/bin
service.bat install
这似乎是 Tomcat 的问题,但当前的 开发者 snapchot(主干)变更日志 表明它已经针对尚未发布的 Tomcat 9.0.15+ 进行了修复,没有分配明确的错误报告:
Tomcat 9.0.15(市场)正在开发中/Catalina:
修复9.0.14中暴露的一个bug,确保Tomcat作为服务运行时及时终止。 (市场)
我们在 Tomcat v9.0.26 上也遇到了同样的问题。一旦您终止服务器,Tomcat 就花了 60 秒才完成。我们努力关闭应用程序中的所有内容,最后我们意识到我们有一个 ThreadPoolExecutor 创建了一个 newCachedThreadPool() 并且这个缓存池的 “keepAliveTime”为 60 秒。
因此,在终止 tomcat 后,线程池等待 60 秒以检查线程是否仍需要重用。直到这一次之后,它才真正关闭。因此,解决方案是在关闭应用程序后关闭缓存的线程池。
即使在 Tomcat 9.0.75 上我仍然遇到与 Rahul 相同的问题。
这似乎与 v9 中的实用程序执行器有关,如本文答案中所述:作为 Windows 服务运行的嵌入式 tomcat 需要很长时间才能停止服务
因此,我尝试更改 Apache Tomcat 服务的配置,似乎将时间从 60 多秒减少到了 20 秒以下。