c3p0連接池連接泄漏檢測

配置文件c3p0-config.xml中加入:
true
1
debugUnreturnedConnectionStackTraces 默認爲false,如果此參數設置爲true,當所有連接用完的時候,會以堆棧信息顯示哪些代碼使用
了連接。由於跟蹤連接狀態會產生額外的消耗,如果程序穩定,應該將此參數恢復爲默認值false。
unreturnedConnectionTimeout 設置連接被checkout後,經過多長時間還未返還連接池,則連接緩衝池直接Kill該連接

設置完成後重現錯誤,可以觀察到堆棧信息如下:
java.lang.Exception: DEBUG ONLY: Overdue resource check-out stack trace.
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:506)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
at com.xinge.mms.push.jdbc.C3p0ConnectionProvider.getMms2Connection(C3p0ConnectionProvider.java:47)
at com.xinge.mms.push.manager.DBMms2Manager.isDetail(DBMms2Manager.java:78)
at com.xinge.mms.push.handler.IosMessageHandler.getAlert(IosMessageHandler.java:83)
at com.xinge.mms.push.handler.IosMessageHandler.sendMessage(IosMessageHandler.java:70)
at com.xinge.mms.push.apnstask.IosMessageProcessor4Test.run(IosMessageProcessor4Test.java:59)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)

從中可以看到DBMms2Manager.isDetail(DBMms2Manager.java:78),查看代碼發現,其中獲取連接使用完後未關閉,從而造成連接泄漏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章