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)  編輯  收藏

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


          網站導航:
           
          人人游戲網 軟件開發網 貨運專家
          主站蜘蛛池模板: 福州市| 新竹县| 东港市| 平陆县| 平定县| 黎城县| 景宁| 那坡县| 黎川县| 二连浩特市| 庐江县| 体育| 绥阳县| 凤城市| 巩留县| 长乐市| 金平| 和平县| 开远市| 安福县| 江油市| 山东| 西华县| 昭平县| 葵青区| 香港| 五原县| 宜黄县| 利川市| 潜江市| 蕲春县| 汕头市| 闽清县| 临西县| 赞皇县| 清水县| 获嘉县| 历史| 武功县| 桂东县| 嘉善县|