DBCP連接池配置參數注意事項

DBCP連接池配置參數注意事項【整合自網絡】

maxIdle值與maxActive值應配置的接近。

因爲,當連接數超過maxIdle值後,剛剛使用完的連接(剛剛空閒下來)會立即被銷燬。而不是我想要的空閒M秒後再銷燬起一個緩衝作用。這一點DBCP做的可能與你想像的不一樣。

若maxIdle與maxActive相差較大,在高負載的系統中會導致頻繁的創建、銷燬連接,連接數在maxIdle與maxActive間快速頻繁波動,這不是我想要的。

高負載系統的maxIdle值可以設置爲與maxActive相同或設置爲-1(-1表示不限制),讓連接數量在minIdle與maxIdle間緩衝慢速波動。

timeBetweenEvictionRunsMillis建議設置值

initialSize=”5”,會在tomcat一啓動時,創建5條連接,效果很理想。

但同時我們還配置了minIdle=”10”,也就是說,最少要保持10條連接,那現在只有5條連接,哪什麼時候再創建少的5條連接呢?

1、等業務壓力上來了, DBCP就會創建新的連接。

2、配置timeBetweenEvictionRunsMillis=“時間”,DBCP會啓用獨立的工作線程定時檢查,補上少的5條連接。銷燬多餘的連接也是同理。

連接銷燬的邏輯

DBCP的連接數會在 0 - minIdle - maxIdle - maxActive 之間變化。變化的邏輯描述如下:

默認未配置initialSize(默認值是0)和timeBetweenEvictionRunsMillis參數時,剛啓動tomcat時,連接數是0。當應用有一個併發訪問數據庫時DBCP創建一個連接。

目前連接數量還未達到minIdle,但DBCP也不自動創建新連接已使數量達到minIdle數量(沒有一個獨立的工作線程來檢查和創建)。

隨着應用併發訪問數據庫的增多,連接數也增多,但都與minIdle值無關,很快minIdle被超越,minIdle值一點用都沒有。

直到連接的數量達到maxIdle值,這時的連接都是隻增不減的。 再繼續發展,連接數再增多並超過maxIdle時,使用完的連接(剛剛空閒下來的)會立即關閉,總體連接的數量穩定在maxIdle但不會超過maxIdle。

但活動連接(在使用中的連接)可能數量上瞬間超過maxIdle,但永遠不會超過maxActive。

這時如果應用業務壓力小了,訪問數據庫的併發少了,連接數也不會減少(沒有一個獨立的線程來檢查和銷燬),將保持在maxIdle的數量。

默認未配置initialSize(默認值是0),但配置了timeBetweenEvictionRunsMillis=“30000”(30秒)參數時,剛啓動tomcat時,連接數是0。馬上應用有一個併發訪問數據庫時DBCP創建一個連接。

目前連接數量還未達到minIdle,每30秒DBCP的工作線程檢查連接數是否少於minIdle數量,若少於就創建新連接直到達到minIdle數量。

隨着應用併發訪問數據庫的增多,連接數也增多,直到達到maxIdle值。這期間每30秒DBCP的工作線程檢查連接是否空閒了30分鐘,若是就銷燬。但此時是業務的高峯期,是不會有長達30分鐘的空閒連接的,工作線程查了也是白查,但它在工作。到這裏連接數量一直是呈現增長的趨勢。

當連接數再增多超過maxIdle時,使用完的連接(剛剛空閒下來)會立即關閉,總體連接的數量穩定在maxIdle。停止了增長的趨勢。但活動連接(在使用中的連接)可能數量上瞬間超過maxIdle,但永遠不會超過maxActive。

這時如果應用業務壓力小了,訪問數據庫的併發少了,每30秒DBCP的工作線程檢查連接(默認每次查3條)是否空閒達到30分鐘(這是默認值),若連接空閒達到30分鐘,就銷燬連接。這時連接數減少了,呈下降趨勢,將從maxIdle走向minIdle。當小於minIdle值時,則DBCP創建新連接已使數量穩定在minIdle,並進行着新老更替。

配置initialSize=“10”時,tomcat一啓動就創建10條連接。其它同上。

minIdle要與timeBetweenEvictionRunsMillis配合使用纔有用,單獨使用minIdle不會起作用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章