【问题标题】:Kill a request taking too long in Java servlet在 Java servlet 中终止一个耗时过长的请求
【发布时间】:2018-03-27 05:39:03
【问题描述】:

我有一个简单的 Java Servlet 应用程序正在运行。它有几个端点。尽管服务非常快,但我收到的一些请求有时会比预期花费更多的时间。杀死处理时间超过约 20 秒的任何请求的最佳方法是什么?

【问题讨论】:

    标签: java servlets java-threads


    【解决方案1】:

    如果你想中断请求处理线程并且你正在使用Tomcat你可以尝试Stuck Thread Detection Valve:

    interruptThreadThreshold

    应中断卡住的线程以尝试“释放”它的最短持续时间(以秒为单位)。

    请注意,不能保证线程会解开。这通常适用于卡在 I/O 或锁上的线程,但在无限循环的情况下可能无用。

    默认为 -1 禁用该功能。要启用它,该值必须大于或等于阈值。

    在客户端实现Circuit Breaker 可能会更好,因为interruptThreadThreshold 不能保证适用于所有场景。

    【讨论】:

    • 嗨,卡罗尔,感谢您的回复。不幸的是,我的服务运行嵌入式 Jetty 服务器而不是 Tomcat。但是我想出了一个解决方法。我将我的代码放在一个计时器任务中并处理 TimeoutException。如果任务关闭失败,希望这不应该使用太多资源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 2017-12-06
    • 1970-01-01
    • 2016-08-29
    相关资源
    最近更新 更多