DBCP連接池配置參數
本文參考自:https://blog.csdn.net/zys_1997/article/details/78107783
首先,明確連接、活動連接(連接正被使用)、空閑連接的概念
創建連接
1、初始化 2、空閑連接低於最小空閑minIdle
銷毀連接
1、空閑連接數目高於最大空閑 2、活動連接被遺棄
回收行為
1、空閑連接回收器(定時執行)2、連接回收器(maxwait後觸發)
--------------------------
initialSize 初始化連接數,即連接池啟動時池子中的連接數目
maxActive 最大活動連接數,即連接池中可同時連接的最大數目
minIdle 最小空閑連接,連接池中最少的空閑的連接數,
低於這個數量時,意味著連接不夠用了,會被創建新的連接
默認為0,該參數越接近maxIdle,性能越好,因為連接的創建和銷毀,都是需要消耗資源的;
不宜太大,因為在機器很空閑的時候,也會創建低於minidle個數的連接,類似於jvm參數中的Xmn設置。
maxIdle 最大空閑連接
超過此參數時空閑連接將被釋放,如果設置為負數表示不限制
默認為8個,maxIdle不能設置太小,因為假如在高負載的情況下,連接的打開時間比關閉的時間快,會引起連接池中idle的個數上升超過maxIdle,而造成頻繁的連接銷毀和創建,類似於jvm參數中的Xmx設置
maxWait 請求連接時,最長的等待時間。
單位ms,當沒有可用連接時,連接池會等待連接釋放,超過該時間限制會拋出異常,如果設置-1表示無限等待(默認為無限)。
validationQuery 驗證操作時使用得SQL語句
testWhileIdle 連接空閑時是否被空閑連接回收器(如果有)驗證
如果驗證失敗,將直接回收
testOnBorrow 連接被借走(取出使用)時需不需要驗證
默認值是true,即每次從連接池中取出連接時,都需要執行validationQuery中的SQL進行測試,這會導致性能下降7-10倍。
一般設為false,不要測試。
--------------------
以下三者配合使用:
minEvictableIdleTimeMillis 連接空閑了多久會被空閑連接回收器回收
numTestsPerEvictionRun 空閑連接回收器每次檢查多少個連接
timeBetweenEvictionRunsMills 空閑連接回收器運行周期
每timeBetweenEvictionRunsMills運行一次空閑連接回收器(獨立線程)。
每次檢查numTestsPerEvictionRun個連接,如果連接空閑時間超過minEvictableIdleTimeMillis就先銷毀,之後如果小於minIdle數量,就新建連接,維護數量不少於minIdle,過行了新老更替。
--------------------
以下三者配合使用:
removeAbandonedTimeout 連接多久沒被使用即視為Abandoned,即連接泄漏
removeAbandoned 當active連接快到maxActive連接的時候,是否回收無效的連接回收
備註:maxWait的時間不要設得太長,maxWait如果設置太長那麽客戶端會等待很久才激發回收事件。
logAbandoned 回收事件後,是否在log中打印出回收Connection的錯誤信息,包括在哪個地方用了Connection卻忘記關閉了,在調試的時候很有用。
DBCP連接池配置參數