WebLogic阻止了线程保护

时间:2010-04-25 18:40:33

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

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

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

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

2 个答案:

答案 0 :(得分:22)

Weblogic在StuckThreadMaxTime之后 NOT 杀死卡住的线程。它不能这样做,消息只是一个状态信息,所以你(即管理员)知道线程已经超过10分钟(600秒= 10分钟,而不是15分钟)

这是一个可配置的值。

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

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

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

答案 1 :(得分:7)

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运行的线程计入失败的服务器状态。