我用我的gui應用程序使用c3po池。我有以下的配置c3po助手線程死鎖
overrides.put("maxStatementsPerConnection", 30);
overrides.put("maxPoolSize",70);
overrides.put("checkoutTimeout", 50000);
偶爾我進入的情況下,試圖得到一個連接超時
java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:527)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
at com.jthink.jaikoz.db.Db.createConnection(Db.java:402)
即使我敢肯定,我沒有其他的連接打開。事實上,我確實曾經啓用了一些附加選項(debugUnreturnedConnectionStackTraces
,unreturnedConnectionTimeout
),以嘗試識別未關閉連接的問題並發現沒有問題。這個問題很少發生,只有在運行一段時間後纔會發生。我正在使用嵌入式Derby
數據庫。
幸運的是,當它失敗時,我正在運行它Yourkit
Profiler已啓用,我可以監視分析,並發現我們有三個c3po線程都在等待對方,這就是爲什麼我認爲這裏實際上存在一個死鎖
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread#0
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread#1
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread#2
這是否類似於設置numHelperThreads
?
我注意到了這
一個screendump我有沒有發現C3PO一個問題,我可以編寫歇着吧?
對不起,c3po是什麼?除了星球之外的其他機器人呢? – Iznogood 2012-01-10 20:27:45
@Iznogood c3p0是一個PooledConnection庫:http://www.mchange.com/projects/c3p0/index.html – 2012-01-10 20:29:28
@丹偉感謝! – Iznogood 2012-01-10 20:31:38