我們在Grails應用程序中使用DBCP。該數據庫位於另一臺服務器上,因此TCP/IP將在此處播放。我們經常通過顯示流程列表來監控數據庫,並且我們從未見過超過50個連接。然而,客戶端上的套接字增長很快(我看到了超過2700個)。他們大多數處於TIME_WAIT狀態。帶DBCP的MySQL正在創建大量的套接字,獲取NoRouteToHostException
所以最終我們得到一個NoRouteToHostException,因爲它無法打開套接字。
請注意,在這個用例中,我們在不到一分鐘的時間內將數據庫命中了超過40,000次。
有沒有人有建議,爲什麼這可能是?我認爲,由於我們的連接池被限制爲100(我們只能看到大約50個連接打開),我只能看到略多於50個連接,因爲偶爾可能會失效。但我們看到數千人。這是預期的嗎?或者關於我們在看這種情況時可能錯過的其他提示?
這裏是我們使用的是DBCP設置:
properties {
maxActive = 100
maxIdle = 4
minIdle = 1
initialSize = 1
minEvictableIdleTimeMillis = 60000
timeBetweenEvictionRunsMillis = 60000
maxWait = 10000
removeAbandoned = true
removeAbandonedTimeout = 60
validationQuery = "/* PING */ SELECT 1"
testOnBorrow = true
testWhileIdle = true
numTestsPerEvictionRun = -1
logAbandoned = true
}
另外請注意,我們使用autoReconnect的= TRUE在連接字符串,但我們正在考慮放棄它(我們會過時連接過夜,否則)。
謝謝!