文章目录
- 1. STUCK
- 2. HOGGER
- 3. ACTIVE
- 4. STANDBY
- 5. IDLE
Oracle Fusion Middleware、Oracle Enterprise Manager 以及一些其他的一些产品内部使用的都是 Weblogic 应用服务器。在 Weblogic 服务器中,所有进入的请求都会由线程池之中的
execute 线程进行处理。根据这些线程的活跃度,Weblogic 对线程池中的每个线程进行了分类。Weblogic 服务器是在 JVM 所做的线程状态分类 (
WAITING、
TIMED_WATING、
RUNNABLE、
NEW、
TERMINATED) 的基础上做的这个活跃度分类。本文将对这些线程活跃度分类进行简单介绍。
1. STUCK
一旦一个 execute 线程粘滞于处理某个请求的时间超过了所配置的 stuck thread maximum time (比如,“StuckThreadMaxTime” 参数),它将被标记为 STUCK。“StuckThreadMaxTime” 的默认值是为 10 分钟。
请注意,也许你的线程在超过 10 分钟的时间里工作也没有任何问题,因为有些任务 (比如,各种 I/O) 它本身就是很耗时的操作,这也没什么。但是,假如你的 Weblogic 中真有一些这样的线程,你最好还是考虑一下是否将它们放在另一个工作服务器中,然后根据需要对 “StuckThreadMaxTime” 参数进行调整。
2. HOGGER
在 Weblogic 相关文档中,我们看到了两种对于 HOGGER 线程的定义。下边我把两种定义都列举了一下。两种定义或多或少是一样的,但它们之间也有些许的冲突。
- 当前由某个请求所持有的execute线程被归类为HOGGER。这些线程既不会在超出配置的超时时间后被声明为 STUCK 也不会在那个时间之前被退还给线程池。
- 由调度程序自动检测,当一个execute线程执行的时间远远超出了正常执行时间之后就会被归类为HOGGER。
3. ACTIVE
具备处理进入请求的线程被分类为 ACTIVE 线程。当线程的需求上升时,Weblogic 开始将线程由 STANDBY 状态提升到 ACTIVE 状态,这使得它们能够处理后续的客户端请求。
4. STANDBY
等待被标记为有资格处理传入请求的线程被归类为 STANDBY 线程。这些线程被放在 Standby 线程池中。不需要处理当前工作负载的线程被标示为 STANDBY 线程并被添加到 Standby 线程池中。当需要更多工作线程时这种线程将被激活。这种线程由 JVM Thread Dump 创建但还不能处理客户端请求。
5. IDLE
没有任何任务分配的线程被归类为 IDLE 线程。
原文链接:WebLogic thread – STUCK, ACTIVE, STANDBY。