dbcp的基本配置

  1. initialSize :鏈接池啓動時建立的初始化鏈接數量(默認值爲0)
  2. maxActive :鏈接池中可同時鏈接的最大的鏈接數(默認值爲8,調整爲20,高峯單機器在20併發左右,本身根據應用場景定)
  3. maxIdle:鏈接池中最大的空閒的鏈接數,超過的空閒鏈接將被釋放,若是設置爲負數表示不限制(默認爲8個,maxIdle不能設置過小,由於假如在高負載的狀況下,鏈接的打開時間比關閉的時間快,會引發鏈接池中idle的個數 上升超過maxIdle,而形成頻繁的鏈接銷燬和建立,相似於jvm參數中的Xmx設置)
  4. minIdle:鏈接池中最小的空閒的鏈接數,低於這個數量會被建立新的鏈接(默認爲0,調整爲5,該參數越接近maxIdle,性能越好,由於鏈接的建立和銷燬,都是須要消耗資源的;可是不能太大,由於在機器很空閒的時候,也會建立低於minidle個數的鏈接,相似於jvm參數中的Xmn設置)
  5. maxWait  :最大等待時間,當沒有可用鏈接時,鏈接池等待鏈接釋放的最大時間,超過該時間限制會拋出異常,若是設置-1表示無限等待(默認爲無限,調整爲60000ms,避免因線程池不夠用,而致使請求被無限制掛起)
  6. poolPreparedStatements:開啓池的prepared(默認是false,未調整,通過測試,開啓後的性能沒有關閉的好。)
  7. maxOpenPreparedStatements:開啓池的prepared 後的同時最大鏈接數(默認無限制,同上,未配置)
  8. minEvictableIdleTimeMillis  :鏈接池中鏈接,在時間段內一直空閒, 被逐出鏈接池的時間
  9. (默認爲30分鐘,能夠適當作調整,須要和後端服務端的策略配置相關)
  10. removeAbandonedTimeout  :超過期間限制,回收沒有用(廢棄)的鏈接(默認爲 300秒,調整爲180)
  11. removeAbandoned  :超過removeAbandonedTimeout時間後,是否進 行沒用鏈接(廢棄)的回收(默認爲false,調整爲true
    removeAbandoned參數解釋:
    1. 若是開啓了removeAbandoned,當getNumIdle() < 2) and (getNumActive() > getMaxActive() - 3)時被觸發.
    2. 舉例當maxActive=20, 活動鏈接爲18,空閒鏈接爲1時能夠觸發"removeAbandoned".可是活動鏈接只有在沒有被使用的時間超 過"removeAbandonedTimeout"時才被回收
    3. logAbandoned: 標記當鏈接被回收時是否打印程序的stack traces日誌(默認爲false,未調整)
     
    通常會是幾種狀況出現須要removeAbandoned: 
    1. 代碼未在finally釋放connection , 不過咱們都用sqlmapClientTemplate,底層都有連接釋放的過程
    2. 遇到數據庫死鎖。之前遇到事後端存儲過程作了鎖表操做,致使前臺集羣中鏈接池全都被block住,後續的業務處理由於拿不到連接全部都處理失敗了。

 

2. dbcp的連接validate配置
  1. dbcp是採用了commons-pool作爲其鏈接池管理,testOnBorrow,testOnReturn, testWhileIdle是pool是提供的幾種校驗機制,經過外部鉤子的方式回調dbcp的相關數據庫連接(validationQuery)校驗
  2. dbcp相關外部鉤子類:PoolableConnectionFactory,繼承於common-pool PoolableObjectFactory
  3. dbcp經過GenericObjectPool這一入口,進行鏈接池的borrow,return處理
  4. testOnBorrow : 顧明思義,就是在進行borrowObject進行處理時,對拿到的connection進行validateObject校驗
  5. testOnReturn : 顧明思義,就是在進行returnObject對返回的connection進行validateObject校驗,我的以爲對數據庫鏈接池的管理意義不大
  6. testWhileIdle : 關注的重點,GenericObjectPool中針對pool管理,起了一個Evict的TimerTask定時線程進行控制(可經過設置參數timeBetweenEvictionRunsMillis>0),定時對線程池中的連接進行validateObject校驗,對無效的連接進行關閉後,會調用ensureMinIdle,適當創建連接保證最小的minIdle鏈接數。
  7. timeBetweenEvictionRunsMillis,設置的Evict線程的時間,單位ms,大於0纔會開啓evict檢查線程
  8. validateQuery, 表明檢查的sql
  9. validateQueryTimeout, 表明在執行檢查時,經過statement設置,statement.setQueryTimeout(validationQueryTimeout)
  10. numTestsPerEvictionRun,表明每次檢查連接的數量,建議設置和maxActive同樣大,這樣每次能夠有效檢查全部的連接.
相關文章
相關標籤/搜索