【问题标题】:WebLogic stuck thread protectionWebLogic卡住线程保护
【发布时间】:2012-09-09 14:42:04
【问题描述】:

默认情况下,WebLogic 在 15 分钟(600 秒)后杀死卡住的线程,这由 StuckThreadMaxTime 参数控制。但是,我无法找到有关如何定义“卡住”的更多详细信息。具体来说:

  • 15 分钟倒计时开始的时间点是多少。请求处理开始?最后wait()-like 方法?还有什么?
  • 这仅适用于请求处理线程还是适用于所有线程? IE。请求处理线程可以通过为长时间任务生成工作线程来“逃避”这种保护吗?特别是,它可以将响应写入委托给这样的工人,而无需 15 分钟倒计时吗?

我的用例是通过权限系统下载大文件。由于用户需要经过身份验证并有权查看文件,因此我不能(或至少不知道如何)将其留给简单的 HTTP 服务器,例如阿帕奇。而且由于文件可能很大,下载可能(至少在理论上)需要 15 分钟以上。

【问题讨论】:

    标签: jakarta-ee weblogic weblogic-10.x


    【解决方案1】:

    Weblogic 确实StuckThreadMaxTime 之后杀死卡住的线程。它不能这样做,该消息只是一个状态信息,因此您(即管理员)知道线程已超过 10 分钟(600 秒 = 10 分钟,而不是 15 分钟)

    这是一个可配置的值。

    当线程开始处理服务器中的请求时,计时器启动。线程不会被杀死,但实际上会继续处理,直到操作结束。所以在你的情况下,你不需要担心线程被杀死,它只是告诉你所花费的时间 - 你在这个用例中知道。

    它适用于所有线程 AFAIK - 任何衍生的线程也将在相同的规则下运行。

    恕我直言,Weblogic(或任何应用服务器)不是存储和提供大文件的地方。这适用于 Web 服务器层——我们使用可以运行文件下载 servlet 的 SunOne。在您的情况下,您需要 Tomcat 和 Apache 来优化它。

    【讨论】:

    • 好的,但据我所知,如果卡住的线程太多,它可以重新部署整个应用程序,不是吗?我可能把事情和会话超时搞混了——过去我们遇到过一些问题。关于文件 - 应用程序如此庞大和错误,以至于没有时间花在优化上,因为总是有更紧迫的问题。
    • 如果卡住的线程太多,服务器将停止响应新请求 - 但在您的情况下,它们并不是真正“卡住”,而是正在处理长请求。更好的方法是为 FileDownloadServlet 提供它自己的执行线程池——在 WL10 上,这将是一个专用的 WorkManager。这确保了下载中卡住/受影响的任何线程都不会影响服务器处理正常请求的其余部分。请参阅此处了解更多信息 - download.oracle.com/docs/cd/E11035_01/wls100/config_wls/…。您可以为该 servlet 定义调度策略。
    • 感谢您的回答和澄清。
    • 有没有办法杀死 weblogic 中卡住的线程,一旦我管理员发现了这一点?
    • @f1wade:不——不可能
    【解决方案2】:

    WLS10 WorkManager 文档可能会让人头疼。有关如何在 weblogic.xml 中为 webapp 定义 WorkManager 并分配特定 servlet 以使用它的分步示例,请参阅 http://blogs.oracle.com/jamesbayer/2010/01/work_manager_leash_for_slow_js.html

    除了该示例之外,您可以将 <ignore-stuck-threads>true</ignore-stuck-threads> 添加到 <work-manager> 定义中,应该防止为该 WorkManager 工作的线程被计入故障服务器状态。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    相关资源
    最近更新 更多