【问题标题】:WebLogic (10.3.5) Thread Pool & Stuck Threads - What is considered continual use?WebLogic (10.3.5) 线程池和卡住线程 - 什么被认为是持续使用?
【发布时间】:2011-12-11 22:35:20
【问题描述】:
我想发现卡住的线程(通过设置 StuckThreadMaxTime 来监控连续线程的使用),并且考虑到每个事务的运行时间都很短,我想将其设置为一个较低的值——比如 20 秒。
我怀疑一旦线程返回到池中,Continuous use 计数器就会重新设置(这将是合乎逻辑的)即使线程几乎立即被重新使用。但我不确定。
是否有人确定将线程返回到池中会设置连续使用“时钟”而不是 StuckThreadMaxTime,即使线程在池中的时间很短,无法检测到?
【问题讨论】:
标签:
performance
threadpool
weblogic-10.x
【解决方案1】:
我不确定您所说的“连续使用计数器”是什么意思,但我可以解释 Weblogic 线程是如何工作的,希望这能澄清您的疑问。
WL 为每个传入请求分配一个线程。该线程将用于完成请求,然后返回线程池。
StuckThreadMaxTime 的作用是报告线程已超过同一请求的时间限制。
因此,如果将其设置为默认 600 秒,则在超过该时间时将记录一条消息。
注意 - Weblogic 不会在 600 秒后清除卡住的线程,它会继续处理只要它需要。它只是在日志中记录此事件。
最后,当请求完成时,线程可以用于下一个请求。您可以通过在管理控制台中查看来验证每个线程完成了多少请求
Servers > Monitoring > Threads 将显示线程数和完成的请求数
所以回到你的确切问题 - StuckThreadMaxTime 为每个请求重置,而不是跨越多个请求
此计时器在请求时启动,而不是在线程返回池时启动。
您可以通过线程转储验证这一点 - 如果您收到(比如说)线程 7 的 StuckThread 消息,但几分钟后您可以看到线程 7 可能已清除并且现在正在处理另一个请求。
进一步阅读:
WebLogic stuck thread protection