posts - 241,  comments - 116,  trackbacks - 0

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

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

             下面是核心的代碼片段,但從實(shí)現(xiàn)思路上還是比較好理解的,針對(duì)所有的 tomcat請(qǐng)求,該 valve都會(huì)攔截,并到當(dāng)?shù)膱?zhí)行的線程通過(guò)一個(gè)引入進(jìn)行保存,記錄開(kāi)始時(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)求線程情況。

          體類(lèi)圖如下:

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

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

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

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

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

          invoke 方法代碼如下:


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

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

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

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


          網(wǎng)站導(dǎo)航:
           
          人人游戲網(wǎng) 軟件開(kāi)發(fā)網(wǎng) 貨運(yùn)專(zhuān)家
          主站蜘蛛池模板: 台州市| 英吉沙县| 泰宁县| 安西县| 珠海市| 通河县| 天峻县| 滨海县| 淄博市| 若尔盖县| 兴隆县| 达孜县| 漳浦县| 临清市| 亚东县| 和静县| 凉山| 文水县| 育儿| 延庆县| 沙田区| 库尔勒市| 合山市| 通河县| 和龙市| 龙井市| 巴青县| 濮阳县| 邮箱| 衡阳市| 乌海市| 南木林县| 鹿邑县| 浪卡子县| 泽库县| 崇义县| 富宁县| 岳普湖县| 右玉县| 莱西市| 宿松县|