Apache Common-pool2 參數說明


Apache Common-pool2 參數說明


在本身使用 Apache Common-pool2 寫鏈接池的時候,一下幾個參數須要特別注意的: java

    maxTotal : 默認值:8 併發

            運行建立的最大的鏈接個數 spa

    minIdle   : 默認值:0 線程

            最小保持的鏈接個數
it

    maxIdle  :默認值:8 io

            最大的空閒個數
table

    maxWaitMillis : 默認值:-1 配置

            獲取鏈接的最大的等待時間
object

    minEvictableIdleTimeMillis : 默認值:1000L * 60L * 30L (30分鐘) 線程池

          鏈接空閒多久之後之後須要被回收。  ()

    timeBetweenEvictionRunsMillis  : 默認值: -1 

        鏈接池的 回收線程的檢查時間 。 若是小於 0 ,則不會檢查。

    numTestsPerEvictionRun  : 默認值 3  。 

        每次檢查回收的線程的個數。 


——————————————————————————————————————————————

    上面是對經常使用的一些參數的說明,下面就 鏈接池的建立過程和銷燬過程進行說明:

    線程池增長的過程以下:

            若是不停的建立鏈接,首先檢查鏈接池裏面是否有鏈接能夠用,若是沒有,檢查 已經建立的鏈接的個數是否超過了maxTotal ,若是超過,等待maxWaitMillis 毫秒,看有沒有鏈接釋放,若是有,獲取到鏈接,若是沒有,直接返回 : java.util.NoSuchElementException: Timeout waiting for idle object 異常信息。

    若是沒有超過maxTotal , 則建立一個鏈接出來。 用完這個鏈接,返回給線程池的時候,檢查當前線程池的 大小是否是超過了 maxIdle , 若是超過了,直接 銷燬掉這個鏈接,若是沒有,返回給線程池。


    線程池減小的過程

        若是你沒有配置 timeBetweenEvictionRunsMillis , 則鏈接池中保存的鏈接的最小的大小爲 minIdle , 最大的值爲 maxIdle  , maxIdle - minIdle 之間的數據是不會被主動回收的。

            這裏就有個問題,若是你的系統的併發上去了。線程池的大小 增長到 maxIdle , 等系統的請求降下來之後,線程池的大小並無恢復到 minIdle 的大小。

       若是配置了  timeBetweenEvictionRunsMillis  , 就會啓動一個線程, 每隔 這個時間就會去檢查 , 若是若是超過了 minEvictableIdleTimeMillis  這個時間沒有使用 , 或者 大於了 maxIdle , 會進行回收, 回收的線程的個數 默認是 3 個 。  若是回收完了 , 再去檢查 線程池的 大小是否是 小於 minIdle , 若是小於 , 則建立 對應 少的 線程 , 而後添加到 對應的線程池 中 。 

相關文章
相關標籤/搜索