連線池超時獲取不到連線的可能原因

2022-09-19 09:03:11 字數 641 閱讀 1279

平時工作用資料庫連線池的時候,有時候會遇見超時獲取不到的報錯:

connection is not **ailable, request timed out after xxms.

但是,並不能一下子看出什麼問題導致,因為可能性有蠻多:

這種情況,連線數達到最大連線數,並且所有連線都處於 active 狀態, 一般有2個原因

初步判斷:qps 突增,大大超過原預估的連線池容量需求

進一步判斷:

處理變慢,連線歸還連線池就慢,單位時間乙個連線處理的請求數就降低

初步判斷:sql耗時曲線增高

進一步判斷: 這種情況會負載些 要綜合看各項指標

當然,有可能你發現連線池還沒達到最大連線數,但是就是超時獲取不到; 這時候很大的概率是db 連不上了,或者 機器和db之間的網路存在問題

這種比較好判斷:可以進一步從報錯堆疊中檢查,是 socket timeout 還是其他什麼具體原因

同乙個報錯,可能有各種各樣的原因,不要急於歸結於乙個點,要綜合、客觀地分析各種現象;

同時,建立完善的監控、埋點,以便快速收集客觀、全面、時間遞進的資料幫助排障; 比如第一類原因, 沒有監控圖示、沒有曲線圖,就需要你具備老道的經驗,還得乙個個的去檢查,才能最後定位根因

連線池鏈結超時

資料庫連線池中的connection在八小時內沒有被用到,則會自動斷開連線,那麼怎麼處理資料庫連線超時的問題?我的 public class connectionfacory public static synchronized connectionfacorygetinstance string ...

druid連線池獲取不到連線的一種情況

資料來源一開始配置 jdbc.initialsize 1 jdbc.minidle 1 jdbc.maxactive 5 程式執行一段時間後,執行查詢拋如下異常 exception org.mybatis.spring.mybatissystemexception nested exception ...

通過連線池獲取的連線無效

如mysql資料庫發現乙個連線空閒時間超限,會在資料庫端自動關閉這個連線。這時資料來源並不知道這個連線已被資料庫關閉了,當它將這個無用連線返回給持久化類使用時就會報無法獲取connection異常。解決方法在dbcp連線池中 設 testonborrow 為 true 這樣在連線池將連線給持久化類前...