Tomcat7 StuckThreadDetectionValve 功能分析

本月 Tomcat 7.0.14版本正式发布,其最显著的一个新功能就是引入了 StuckThreadDetectionValve功能,该功能可以帮助分析和检查耗时的请求或潜在可能会出现请求线程阻塞等情况。

    StuckThreadDetectionValve(阻塞线程检测 )功能是通过扩展 Tomcat的 Valve机制进行实现。下面是针对此块代码的实现主要源代码进行的分析,来探究一下该功能的实现原理。

   下面是核心的代码片段,但从实现思路上还是比较好理解的,针对所有的 tomcat请求,该 valve都会拦截,并到当的执行的线程通过一个引入进行保存,记录开始时间。同时启动 MonitoredThread 线程对当前请求线程的运行时间进行检测,一旦出现超出设置的时候值,则会进行保存,这样可以就很容易的获取那些效率低下的请求线程情况。

整体类图如下:

以下是几个重要的全局属性:

stuckCount 可能为阻塞的线程数

threshold 阻塞线程判断的运行时间的依据,超过该时间上限,则将环境该线程为阻塞线程

activeThreads 当前正在运行中的线程

completedStuckThreadsQueue 已经执行完成的阻塞线程情况

invoke 方法代码如下:


把所有请求的线程都放置到 activeThreads Map 对象中,在执行完成后,进行清除。

接下来,复写 backgroundProcess方法 , 对线程的运行状态和时间进行检测,一旦有发现阻塞嫌疑,则进行记录。

至此实现原理已经介绍完成。完整的代码实现可以参见 Tomcat 7源码 下载地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值