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資料庫配置問題
以下是相關查詢到的部落格連結,供參考!