我想发现卡住的线程(通过设置StuckThreadMaxTime来监控连续的线程使用)并且假设每个事务都是短时间运行的,我想将它设置为低值 - 比如说20秒。
我怀疑一旦线程返回到池中就会重新设置连续使用计数器(这将是合乎逻辑的)即使线程很快就被重用了。但我肯定不知道这一点。
有没有人确切知道将一个线程返回到池会设置连续使用“时钟”而不是StuckThreadMaxTime,即使该线程在池中的时间长度不可检测到很短的时间?
答案 0 :(得分:3)
我不确定“连续使用计数器”是什么意思,但我可以解释Weblogic线程是如何工作的,希望能够澄清你的疑问。
每个传入的请求都由WL分配一个线程。该线程将用于完成请求,然后返回到线程池。
StuckThreadMaxTime所做的是报告该线程已超过同一请求的时间限制。
因此,如果将其设置为默认值600秒,则会在超过该时间时记录一条消息。
注意 - Weblogic 不会在600秒后清除卡住的线程,它会在需要时继续处理。它只是在日志中记录了这个事件。
最后,当请求完成时,该线程可用于下一个请求。您可以通过在管理控制台中查看来验证每个线程已完成的请求数
服务器>监控>线程将显示线程数和已完成请求的数量
回到您的确切问题 - 为每个请求重置StuckThreadMaxTime,而不是通过多个请求传输
此计时器在请求时启动,而不是在线程返回池时启动。
您可以通过线程转储验证这一点 - 如果您收到(例如)线程7的StuckThread消息,但几分钟后您可以看到线程7可能已经清除,现在正在提供另一个请求。
进一步阅读: