posts - 156,  comments - 601,  trackbacks - 0
          公告
          <2011年9月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          常用鏈接

          留言簿(45)

          隨筆分類(145)

          隨筆檔案(110)

          文章檔案(1)

          友情鏈接

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 678670
          • 排名 - 68

          最新評論

          閱讀排行榜

          評論排行榜

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

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

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

          整體類圖如下:


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


          stuckCount 可能為阻塞的線程數

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

          activeThreads 當前正在運行中的線程

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

          invoke 方法代碼如下:


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

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


          至此實現原理已經介紹完成。完整的代碼實現可以參見Tomcat 7源碼 下載地址

          Good Luck!
          Yours Matthew!
          posted on 2011-05-25 21:51 x.matthew 閱讀(3065) 評論(4)  編輯  收藏 所屬分類: Application ServerBest Practise(JDK API)
          主站蜘蛛池模板: 郯城县| 无为县| 宜章县| 高阳县| 突泉县| 耿马| 井研县| 南昌市| 南川市| 临海市| 西吉县| 峡江县| 广南县| 绍兴县| 嘉兴市| 咸丰县| 延安市| 芜湖县| 宁明县| 阳山县| 陇南市| 通海县| 南宫市| 墨竹工卡县| 资阳市| 松潘县| 巴南区| 建宁县| 拜城县| 蒙山县| 卢氏县| 东丰县| 阿克苏市| 盐津县| 珠海市| 鄂托克旗| 永昌县| 光泽县| 湟中县| 乌兰浩特市| 陇川县|