posts - 241,  comments - 116,  trackbacks - 0

          本月 Tomcat 7.0.14版本正式發(fā)布,其最顯著的一個(gè)新功能就是引入了 StuckThreadDetectionValve功能,該功能可以幫助分析和檢查耗時(shí)的請(qǐng)求或潛在可能會(huì)出現(xiàn)請(qǐng)求線程阻塞等情況。

              StuckThreadDetectionValve(阻塞線程檢測(cè) )功能是通過擴(kuò)展 Tomcat的 Valve機(jī)制進(jìn)行實(shí)現(xiàn)。下面是針對(duì)此塊代碼的實(shí)現(xiàn)主要源代碼進(jìn)行的分析,來探究一下該功能的實(shí)現(xiàn)原理。2011大智慧下載

             下面是核心的代碼片段,但從實(shí)現(xiàn)思路上還是比較好理解的,針對(duì)所有的 tomcat請(qǐng)求,該 valve都會(huì)攔截,并到當(dāng)?shù)膱?zhí)行的線程通過一個(gè)引入進(jìn)行保存,記錄開始時(shí)間。同時(shí)啟動(dòng) MonitoredThread 線程對(duì)當(dāng)前請(qǐng)求線程的運(yùn)行時(shí)間進(jìn)行檢測(cè),一旦出現(xiàn)超出設(shè)置的時(shí)候值,則會(huì)進(jìn)行保存,這樣可以就很容易的獲取那些效率低下的請(qǐng)求線程情況。

          體類圖如下:

          以下是幾個(gè)重要的全局屬性:

          stuckCount 可能為阻塞的線程數(shù)

          threshold 阻塞線程判斷的運(yùn)行時(shí)間的依據(jù),超過該時(shí)間上限,則將環(huán)境該線程為阻塞線程

          activeThreads 當(dāng)前正在運(yùn)行中的線程

          completedStuckThreadsQueue 已經(jīng)執(zhí)行完成的阻塞線程情況

          invoke 方法代碼如下:


          把所有請(qǐng)求的線程都放置到 activeThreads Map 對(duì)象中,在執(zhí)行完成后,進(jìn)行清除。

          接下來,復(fù)寫 backgroundProcess方法 , 對(duì)線程的運(yùn)行狀態(tài)和時(shí)間進(jìn)行檢測(cè),一旦有發(fā)現(xiàn)阻塞嫌疑,則進(jìn)行記錄。

          至此實(shí)現(xiàn)原理已經(jīng)介紹完成。完整的代碼實(shí)現(xiàn)可以參見 Tomcat 7源碼
          posted on 2011-05-26 11:54 墻頭草 閱讀(246) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          人人游戲網(wǎng) 軟件開發(fā)網(wǎng) 貨運(yùn)專家
          主站蜘蛛池模板: 南川市| 红原县| 墨玉县| 阜阳市| 日土县| 庆元县| 阳城县| 确山县| 简阳市| 迭部县| 太保市| 察哈| 邯郸县| 五原县| 永安市| 泗水县| 仙居县| 馆陶县| 连山| 岑巩县| 五华县| 大埔县| 兴国县| 保定市| 星座| 惠州市| 博野县| 石嘴山市| 蕉岭县| 大化| 烟台市| 红原县| 巴彦县| 嘉鱼县| 闸北区| 永定县| 龙门县| 剑川县| 岑巩县| 临夏县| 玛曲县|