An attempt by a client to checkout a Connection has timed out

An attempt by a client to checkout a Connection has timed out: 客戶端嘗試獲取鏈接connection鏈接超時.數據庫

當鏈接池的鏈接用完時,客戶端調用getConnection()後,等待獲取新鏈接的時間,超時後將拋出該異常。debug

解決方法:get

1.適當加大maxPoolSize和minPoolSize  ,能夠緩解這種狀況。io

2.自動超時回收unreturnedConnectionTimeout(強烈推薦)。cli

最近遇到這個形成的問題了,拋出異常爲:Overdue resource check-out stack trace。這裏作一下深刻研究。配置

c3p0配置是這樣的:bug

debugUnreturnedConnectionStackTraces=true
unreturnedConnectionTimeout=1000

解釋一下:debugUnreturnedConnectionStackTraces是一個開關,啓用以後,對於每一個從鏈接池拿出去的數據庫鏈接,若是一段時間內沒有歸還,C3P0就會強制關閉這個鏈接,並將獲取鏈接時的stack trace,以拋出異常的方式顯示出來,即Overdue resource check-out stack trace。 unreturnedConnectionTimeout設置多長時間會超時,以秒爲單位。方法

假設系統中懷疑有鏈接泄露,那麼,就能夠啓用這個功能,評估全部頁面執行完成須要的最長時間,例如20分鐘,而後將unreturnedConnectionTimeout設置爲略大於這個時間。im

3.配置超時自動斷開 (推薦)
maxIdleTimeExcessConnections=20
maxConnectionAge=20 
default : 0 單位 s
配置鏈接的生存時間,超過這個時間的鏈接將由鏈接池自動斷開丟棄掉。固然正在使用的鏈接不會立刻斷開,而是等待它close再斷開。配置爲0的時候則不會對鏈接的生存時間進行限制。數據

4.檢查代碼,確認用完後close鏈接(不要小看這個,容易遺漏)。

相關文章
相關標籤/搜索