java – c3po帮助程序线程要死锁
发布时间:2020-12-15 02:30:38 所属栏目:Java 来源:网络整理
导读:我用我的gui应用程序使用c3po池.我有以下配置 overrides.put("maxStatementsPerConnection",30);overrides.put("maxPoolSize",70); overrides.put("checkoutTimeout",50000); 偶尔我会遇到尝试连接超时的情况 java.sql.SQLException: An attempt by a client
我用我的gui应用程序使用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数据库. 幸运的是,当它失败的时候,我正在运行它,启用了Youkit 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有问题,我可以编码从中恢复吗? 解决方法
你看到的三个线程确实是帮助线程.这些会异步减慢JDBC操作,例如关闭未使用的连接.堆栈跟踪的最后一行
com.jthink.jaikoz.db.Db.createConnection(Db.java:402) 似乎表明C3P0正在尝试打开一个新连接,但数据库拒绝创建一个.我假设’Jaikoz’数据库拒绝连接,C3P0连接池不是问题. 西蒙 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |