DBCP連接池使用問題
阿新 • • 發佈:2017-06-28
拒絕 連接數 bcp 連接不上 是否 web容器 響應 一段時間 配置文件信息
問題現象:
啟動應用,訪問無壓力,一切正常,一段時間過後,應用訪問異常。
問題分析:
1、web容器線程爆滿,拒絕服務。由於應用並發量大,線程響應時間長增加,線程池連接數逐步遞增直到爆滿,導致應用拒絕服務。
2、通過對線程信息的分析,發現線程處理時間都卡在連接數據庫中,通過對數據庫服務器的檢查,數據庫是沒有問題的。
3、通過查詢服務器日誌,發現數據庫連接異常:連接超時。
4、查詢DBCP連接池連接使用情況,空閑鏈接和使用鏈接還正常。
問題思考:
從以上信息可以確認,問題一定出在應用層,並且是應用連接數據庫之間,但為什麽連接池還有正常鏈接,但是連接不上?而項目已啟動時正常進行的,但運行一段時間,卻報出數據庫連接超時異常信息。線程時間就是消耗在等待數據庫連接的過程。連接池還沒達到最大連接數,空閑連接還有,但為什麽連接不上呢?
解決問題:
帶著以上疑問,反復查看了連接池的配置文件信息,是否配置問題,幾個配置信息給了我靈感,帶著這個思緒繼續重演問題發生的過程和對日誌的觀察,終於發現了問題所在,就是數據庫連接池的空閑鏈接超時。但連接池並沒有立刻回收,當有新的請求進來就繼續分配連接池中的空閑鏈接,但連接池並沒有驗證鏈接的有效性,所以線程就出現了等待超時的一個過程。
解決方案:
1、配置借鏈接要求連接池檢測此鏈接有效性:testOnBorrow
2、配置還鏈接要求連接池檢測此鏈接有效性:testOnReturn
3、配置要求連接池定時檢測空閑鏈接有效性:testWhileIdle
DBCP連接池使用問題