1. 程式人生 > >DBCP連接池使用問題

DBCP連接池使用問題

拒絕 連接數 bcp 連接不上 是否 web容器 響應 一段時間 配置文件信息

問題現象:

啟動應用,訪問無壓力,一切正常,一段時間過後,應用訪問異常。

問題分析:

1、web容器線程爆滿,拒絕服務。由於應用並發量大,線程響應時間長增加,線程池連接數逐步遞增直到爆滿,導致應用拒絕服務。

2、通過對線程信息的分析,發現線程處理時間都卡在連接數據庫中,通過對數據庫服務器的檢查,數據庫是沒有問題的。

3、通過查詢服務器日誌,發現數據庫連接異常:連接超時。

4、查詢DBCP連接池連接使用情況,空閑鏈接和使用鏈接還正常。

問題思考:

從以上信息可以確認,問題一定出在應用層,並且是應用連接數據庫之間,但為什麽連接池還有正常鏈接,但是連接不上?而項目已啟動時正常進行的,但運行一段時間,卻報出數據庫連接超時異常信息。線程時間就是消耗在等待數據庫連接的過程。連接池還沒達到最大連接數,空閑連接還有,但為什麽連接不上呢?

解決問題:

帶著以上疑問,反復查看了連接池的配置文件信息,是否配置問題,幾個配置信息給了我靈感,帶著這個思緒繼續重演問題發生的過程和對日誌的觀察,終於發現了問題所在,就是數據庫連接池的空閑鏈接超時。但連接池並沒有立刻回收,當有新的請求進來就繼續分配連接池中的空閑鏈接,但連接池並沒有驗證鏈接的有效性,所以線程就出現了等待超時的一個過程。

解決方案:

1、配置借鏈接要求連接池檢測此鏈接有效性:testOnBorrow

2、配置還鏈接要求連接池檢測此鏈接有效性:testOnReturn

3、配置要求連接池定時檢測空閑鏈接有效性:testWhileIdle

DBCP連接池使用問題