21

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

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

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

4

2 回答 2

21

Weblogic不会StuckThreadMaxTime. 它不能这样做,该消息只是一个状态信息,因此您(即管理员)知道线程已超过 10 分钟(600 秒 = 10 分钟,而不是 15 分钟)

这是一个可配置的值。

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

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

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

于 2010-04-26T05:20:26.323 回答
6

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

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

于 2011-01-21T21:54:02.150 回答