1. 程式人生 > >javaweb問題集錦: HikariPool-1 - Connection is not available, request timed out after 60001ms.

javaweb問題集錦: HikariPool-1 - Connection is not available, request timed out after 60001ms.

最近伺服器連線資料庫總是超時,檢視報錯日誌顯示

java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 60001ms.

所以懷疑是資料庫連線數不夠的問題.而導致資料庫連線數不夠,原因有很多,總結了一下,大致有兩方面配置問題:1.Hikari配置問題  2.Mysql資料庫配置問題

一.Hikari配置問題 github地址

     1.修改過後Hikari配置檔案

        "connectionTestQuery": "SELECT 1",
        "connectionTimeout": 30000,
        "idleTimeout": 60000,
        "maxLifetime": 120000,
        "maximumPoolSize": 10,
        "minimumIdle": 10

    2.HikariCP 預設配置

 

    3.我的Hikari之前的配置問題是 idleTimeout+1秒>maxLifetime 會導致idleTimeout=0

idleTimeout

預設是600000毫秒,即10分鐘。如果idleTimeout+1秒>maxLifetime 且 maxLifetime>0,則會被重置為0;如果idleTimeout!=0且小於10秒,則會被重置為10秒。如果idleTimeout=0則表示空閒的連線在連線池中永遠不被移除。

只有當minimumIdle小於maximumPoolSize時,這個引數才生效,當空閒連線數超過minimumIdle,而且空閒時間超過idleTimeout,則會被移除。

minimumIdle

控制連線池空閒連線的最小數量,當連線池空閒連線少於minimumIdle,而且總共連線數不大於maximumPoolSize時,HikariCP會盡力補充新的連線。為了效能考慮,不建議設定此值,而是讓HikariCP把連線池當做固定大小的處理,預設minimumIdle與maximumPoolSize一樣。

當minIdle<0或者minIdle>maxPoolSize,則被重置為maxPoolSize,該值預設為10。

maxLifetime

用來設定一個connection在連線池中的存活時間,預設是1800000,即30分鐘。如果設定為0,表示存活時間無限大。如果不等於0且小於30秒則會被重置回30分鐘。

小結:Hikari配置問題,要參照官方文件,及你程式碼裡面的Hikari版本,以及伺服器配置來綜合考慮配置.(Hikari版本很老的話maxlifetime的預設值是不一樣的)

解決:不能算是解決吧,伺服器中的Hikari配置檔案按照上述的修改了,暫時沒什麼問題,待時間來檢驗是否設定合理.mysql資料庫配置,在網上找了很多資料,有的說預設值好,不用修改.有的配置值修改的很大. 所以就沒有修改,還是保持預設值,沒辦法,不是專業的DBA,只能是出了問題,一點點解決吧.

二.Mysql資料庫配置問題

以下是相關查詢到的部落格連結,供參考!