[轉載]跟蹤 c3p0 連線池連線洩漏
阿新 • • 發佈:2019-01-31
最近的專案碰到了連線洩漏的問題。 專案用的是Spring + Hibernate + c3p0,具體表現為,系統
執行一段時間後,使用者開啟登入頁後,執行登入無響應,檢視後臺日誌,提示Could not open
Connection。將c3p0日誌級別調成debug之後,發現c3p0報告連線數已經達到設定的上限。 之前檢
查連線洩漏時,使用的是極低效的辦法,目測程式碼,所以問題解決起來頗費周折,效果還不好。 今
天查了一下c3p0官方手冊,c3p0官方提供了兩個引數,能夠很方便的檢查沒有正確返回連線池的連
接。
debugUnreturnedConnectionStackTraces
預設為false,如果此引數設定為true,當所有連線用完的時候,會以堆疊資訊顯示哪些程式碼使用
了連線。由於跟蹤連線狀態會產生額外的消耗,如果程式穩定,應該將此引數恢復為預設值false。
unreturnedConnectionTimeout
設定連線被checkout後,經過多長時間還未返還連線池,則連線緩衝池直接Kill該連線,此時,結
合debugUnretrunedConnectionStackTraces,我們可以知道是什麼程式持有了連線,並且沒有返回
。這個方法很暴力,有可能造成應用程式不穩定,所以,如果真的出現了連線洩漏,一時半會又找
不到問題點所在,可以暫時使用這個方法讓應用程式跑起來。
參考:c3p0官方手冊