文章目录
- 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。