Jakarta ee WebLogic卡线程保护

Jakarta ee WebLogic卡线程保护,jakarta-ee,weblogic,weblogic-10.x,Jakarta Ee,Weblogic,Weblogic 10.x,默认情况下,WebLogic会在15分钟(600秒)后杀死卡住的线程,这由StuckThreadMaxTime参数控制。然而,我找不到更多关于“stuckness”是如何定义的细节。具体而言: 15分钟倒计时开始的点是什么。请求处理启动?最后一个wait()-like方法?还有别的吗 这仅适用于请求处理线程还是适用于所有线程?也就是说,请求处理线程是否可以通过为长任务生成工作线程来“逃脱”这种保护?特别是,它能在没有15分钟倒计时的情况下将响应写入委派给这样的工作人员吗 我的用例是通过权限系

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

  • 15分钟倒计时开始的点是什么。请求处理启动?最后一个
    wait()
    -like方法?还有别的吗
  • 这仅适用于请求处理线程还是适用于所有线程?也就是说,请求处理线程是否可以通过为长任务生成工作线程来“逃脱”这种保护?特别是,它能在没有15分钟倒计时的情况下将响应写入委派给这样的工作人员吗

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

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

这是一个可配置的值

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

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


IMHO,Weblogic(或任何应用服务器)不是存储和服务大型文件的地方。这是Web服务器层的理想选择—我们使用SunOne,可以在其上运行文件下载servlet。在您的情况下,您需要Tomcat和Apache来优化此功能。

WLS10 WorkManager文档可能会导致一些真正的头颅撕裂。有关如何在weblogic.xml中为webapp定义WorkManager并分配特定servlet以使用它的逐步示例,请参阅


再加上这个例子,您可以将
true
添加到
定义中,这样可以防止在服务器故障状态下对为该WorkManager工作的线程进行计数。

好的,但我知道,如果有太多卡住的线程,它可以重新部署整个应用程序,不是吗?我可能把事情和会话超时搞混了——我们在过去遇到过一些问题。关于文件-应用程序太大且存在缺陷,因此没有时间进行优化,因为总是存在更紧迫的问题。如果有太多卡住的线程,服务器将停止响应新请求-但在您的情况下,它们不是真的“卡住”,而是在处理长请求。更好的方法是为FileDownloadServlet提供自己的执行线程池——在WL10上,这将是一个专用的工作管理器。这可确保下载过程中卡住/受影响的任何线程不会影响服务器处理正常请求的其余部分。请参阅此处了解更多-。您可以为该servlet定义一个调度策略。感谢您的回答和澄清。一旦我管理员弄明白了这一点,有没有办法消除weblogic中卡住的线程?@f1wade:没有-这不可能博客文章已经转到