【问题标题】:Tomcat warning: The executor associated with thread pool [http-apr-8080] has not fully shutdownTomcat 警告:与线程池 [http-apr-8080] 关联的执行程序尚未完全关闭
【发布时间】:2016-05-11 01:07:17
【问题描述】:

我在 linux 服务器上使用 tomcat8 和 jdk1.8 运行 Web 应用程序。

当我关闭 tomcat 时,我收到以下警告消息:

WARNING [main] org.apache.tomcat.util.net.AbstractEndpoint.shutdownExecutor The executor associated with thread pool [http-apr-8080] has not fully shutdown. Some application threads may still be running

注意:我只在关闭 tomcat 时收到此警告,而不是在我取消部署应用程序时收到此警告。

我如何“修复”此警告以使该消息不会出现。 我在应用程序运行时使用 Jstack 进行线程转储,我看到几个 http-apr-8080-exec 线程。

谢谢

【问题讨论】:

    标签: java tomcat threadpool apr


    【解决方案1】:

    我们必须在关闭 tomcat 之前停止任何应用程序,因为 servlet 可能会在关闭过程中处理请求。

    参考:https://www.safaribooksonline.com/library/view/tomcat-the-definitive/0596003188/ch01s02.html

    请查看 - 重启 Tomcat 部分 它说 “Java Servlet 规范还规定,在关闭时,servlet 容器必须等待每个 servlet 完成对所有正在进行的请求的服务,或者等待容器特定的超时持续时间,然后才能使 servlet 停止服务。对于 Tomcat 4,每个 servlet 的超时时间最长为半秒。当 servlet 行为异常并且完成服务请求所需的时间过长时,Tomcat 会发现 servlet 花费的时间过长并强制将其停止服务,因此Tomcat 可以关闭。不过,此处理需要时间,并且会减慢 Tomcat 自己的关闭处理。"

    最佳实践: 当您从 tomcat 停止应用程序时,servlet 将停止服务。因此你不会遇到这个问题。

    请按照先停止应用程序并关闭tomcat服务器的流程。

    【讨论】:

    • 谢谢。我不确定这是真的……在停止 tomcat 之前,您必须取消部署所有 Web 应用程序。如果我找到具体证据,我会调查并更新。
    • 我更正了答案。希望对你有用
    【解决方案2】:

    此错误是由于在实例仍“附加”到 Elastic Load Balancer 时关闭 tomcat 导致的。 ELB 有一个名为Connection Draining 的功能,默认设置为 300 秒。 您可以在关闭 tomcat 之前禁用连接耗尽或仅从 ELB 中删除实例,以免收到警告消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多