gpt4 book ai didi

java - c3p0 中的资源无法 check out 的原因?

转载 作者:行者123 更新时间:2023-11-30 08:12:53 26 4
gpt4 key购买 nike

所以我正在研究 c3p0 API 以调试我们的生产问题之一,该问题导致在检查连接时出现堆栈溢出错误。

我在 BasicResourcePool 类的 checkoutResource 方法中找到以下注释:

    /*
* This function recursively calls itself... under nonpathological
* situations, it shouldn't be a problem, but if resources can never
* successfully check out for some reason, we might blow the stack...
*
* by the semantics of wait(), a timeout of zero means forever.
*/

我想知道这个池中的资源永远无法成功 check out 的原因可能是什么。

答案可能会帮助我查看我的应用程序中可能出现的问题。

最佳答案

因此,尽管这是一个合理的猜测,但单纯的池耗尽(如果泄漏或忘记关闭()连接会发生什么)不会导致堆栈溢出。

checkoutResource(...)时发生栈溢出

  1. 找到一个可用的连接来 check out ,并“初步” check out ;然后
  2. 出了点问题,说明初步 checkout 的Connection不可用;所以
  3. 该函数“回到井中”,递归调用自身以使用新的连接重试

神秘之处在于“出问题了”部分。确实有两件事可能出错:

  1. (最有可能!)您已将 testConnectionOnCheckout 设置为 true,并且所有连接都未通过其连接测试
  2. 在结帐过程中,Connection 碰巧从池中被删除(例如,超过 maxIdleTimemaxConnectionAge 而过期)

如果您看到这种情况,首先要检查的是您的连接或连接测试机制是否有问题。尝试...

  1. DEBUGFINE 处记录 com.mchange.v2.resourcepool.BasicResourcePool 并查找指示无法 checkout 的异常。您可以 grep 查找 A resource could not be refurbished for checkout. 或者,switch Connection testing regimes测试空闲连接和连接 checkin 而不是 checkout ,并以可能不那么具有破坏性的方式观察问题的出现。
  2. 如果您正在做一些会迫使池真正搅动连接、设置非常短的超时或其他事情的事情,那么可以想象竞争条件很棘手。检查 configuration properties 的值maxConnectionAgemaxIdleTimemaxIdleTimeExcessConnections 并确保它们设置合理或未设置(即保持合理的默认值)。

关于java - c3p0 中的资源无法 check out 的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30211610/

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