2012-10-25 76 views
2

我使用的是c3p0(0.9.1.2)版本,一小時左右後我看到numUnclosedOrphanedConnections以每小時1次的速度緩慢增加。 c3p0 docs said爲什麼c3p0中的numUnclosedOrphanedConnections增加?

numUnclosedOrphanedConnections將只在softReset()調用 後非零。它表示在發生軟重置時檢出的 的連接數,因此從池中排除了 ,並且其仍未被客戶端 應用程序關閉。

爲什麼c3p0正在進行軟復位?我的c3p0設置就像

initialPoolSize=1 
minPoolSize=1 
maxPoolSize=100 
maxIdleTime=60 
checkoutTimeout=5000 
testConnectionOnCheckin=true 
+0

你跑什麼樣的環境?你跟蹤numUnclosedOrphanedConnections vi JMX或編程?你有沒有修改任何c3p0屬性? (這樣做會導致池的softReset(),以便修改後的屬性值可以採用。)另一個需要注意的事情是如何關閉連接。 unclosedOrphanedConnections的單調上升表明Connections正在泄露。 –

+0

我正在運行一個64位的Linux機器。 Jdk版本1.6.0_31。我正在通過JMX手動跟蹤它。 c3p0屬性不會被修改。有跟蹤c3p0連接泄漏的好工具嗎? –

+0

是的。請參閱config params unreturnedConnectionTimeout和debugUnreturnedConnectionStackTraces(請參閱http://www.mchange.com/projects/c3p0/)注意,您必須將這些屬性的BOTH設置爲獲取泄漏的堆棧痕跡。你是在自己的應用中嵌入c3p0,還是通過更大的庫/應用服務器(hibernate,spring等)運行它?另一件事,只是爲了讓我感覺更好,是升級到最新版本,c3p0-0.9.2-pre5我不記得任何問題,可以解釋你神祕的軟復位,但自0.9.1以來改變了很多 –

回答

0

謝謝史蒂夫幫我修復它。這是我做到的。

啓用C3PO調試級日誌記錄:

<logger name="com.mchange" additivity="false"> 
<level value="DEBUG" /> 
    <appender-ref ref="C3p0Appender" />   
</logger> 

C3P0設置:

debugUnreturnedConnectionStackTraces=true 
# 30 sec is enough for me but you should change it for your case 
unreturnedConnectionTimeout=30 

和關鍵詞裏面C3P0日誌文件中搜索爲: 「逾期資源退房」

此日誌記錄僅在c3p0的中繼版本中啓用。它應該在pre6發佈。