加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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连接池不是问题.

西蒙

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读