私のGUIアプリケーションでc3poプーリングを使用しました。私は私が私が開いて他の接続を持っていないと確信しているにもかかわらずc3poヘルパースレッドがデッドロックする
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)
接続がタイムアウトを取得しようとする状況に入り込み、次のような構成
時折overrides.put("maxStatementsPerConnection", 30);
overrides.put("maxPoolSize",70);
overrides.put("checkoutTimeout", 50000);
を持っています。実際、私はいくつかの追加オプションを有効にして(debugUnreturnedConnectionStackTraces
、unreturnedConnectionTimeout
)、接続を閉じないと問題を特定しても何の問題も見つけられませんでした。この問題はほとんど発生せず、しばらく実行した後にのみ発生します。私は組み込みのDerby
データベースを使用しています。
今回は失敗しましたが、私はそれを実行していましたYourkit
プロファイラーが有効になっていて、モニタープロファイリングを行うことができました.3つのc3poスレッドがお互いを待っていることがわかりました。そこにデッドロックがここに
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread#0
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread#1
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread#2
実際にはこれはnumHelperThreads
の設定に似ていますか?
私はこの
のスクリーンダンプを取ったが、私はそれから回復するためにコーディングすることができ、C3POに問題を発見したことがありますか?
申し訳ありませんが、c3poとは何ですか?他のロボットはスターウォーズの中にいますか? – Iznogood
@Iznogood c3p0はPooledConnectionライブラリです。http://www.mchange.com/projects/c3p0/index.html –
@DanWありがとう!!! – Iznogood