gpt4 book ai didi

java - c3po 辅助线程会死锁

转载 作者:搜寻专家 更新时间:2023-11-01 03:43:29 25 4
gpt4 key购买 nike

我在我的 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)

尽管我确定我没有打开其他连接。事实上,我曾经启用了一些额外的选项(debugUnreturnedConnectionStackTracesunreturnedConnectionTimeout)来尝试识别未关闭连接的问题,但没有发现任何问题。这个问题很少出现,只有在运行一段时间后才会出现。我使用的是嵌入式 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 的设置?

我截屏了

enter image description here

我是否发现了 c3po 的问题,我可以编写代码从中恢复吗?

最佳答案

您看到的三个线程确实是辅助线程。它们以异步方式减慢 JDBC 操作,例如关闭未使用的连接。堆栈跟踪的最后一行

com.jthink.jaikoz.db.Db.createConnection(Db.java:402)

似乎表明 C3P0 正在尝试打开一个新连接,但数据库拒绝创建一个。我假设“Jaikoz”数据库拒绝连接,C3P0 连接池不是这里的问题。

西蒙

关于java - c3po 辅助线程会死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8810025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com