posts - 241,  comments - 116,  trackbacks - 0

          本月 Tomcat 7.0.14版本正式發布,其最顯著的一個新功能就是引入了 StuckThreadDetectionValve功能,該功能可以幫助分析和檢查耗時的請求或潛在可能會出現請求線程阻塞等情況。

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

             下面是核心的代碼片段,但從實現思路上還是比較好理解的,針對所有的 tomcat請求,該 valve都會攔截,并到當的執行的線程通過一個引入進行保存,記錄開始時間。同時啟動 MonitoredThread 線程對當前請求線程的運行時間進行檢測,一旦出現超出設置的時候值,則會進行保存,這樣可以就很容易的獲取那些效率低下的請求線程情況。

          體類圖如下:

          以下是幾個重要的全局屬性:

          stuckCount 可能為阻塞的線程數

          threshold 阻塞線程判斷的運行時間的依據,超過該時間上限,則將環境該線程為阻塞線程

          activeThreads 當前正在運行中的線程

          completedStuckThreadsQueue 已經執行完成的阻塞線程情況

          invoke 方法代碼如下:


          把所有請求的線程都放置到 activeThreads Map 對象中,在執行完成后,進行清除。

          接下來,復寫 backgroundProcess方法 , 對線程的運行狀態和時間進行檢測,一旦有發現阻塞嫌疑,則進行記錄。

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

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          人人游戲網 軟件開發網 貨運專家
          主站蜘蛛池模板: 枞阳县| 宜丰县| 双峰县| 治多县| 保靖县| 来宾市| 仁布县| 介休市| 永丰县| 偃师市| 香港 | 运城市| 台湾省| 阿克陶县| 嘉峪关市| 麻城市| 清丰县| 淮南市| 前郭尔| 宁乡县| 鸡东县| 凯里市| 天气| 寻乌县| 那曲县| 林甸县| 岱山县| 简阳市| 安新县| 太康县| 台江县| 城口县| 阿拉尔市| 九寨沟县| 米脂县| 富源县| 八宿县| 兴山县| 新巴尔虎左旗| 桂林市| 黔江区|