【问题标题】:C3P0 maxPoolSize exhaustedC3P0 maxPoolSize 用尽
【发布时间】:2013-07-14 04:45:03
【问题描述】:

我有一个使用 C3P0 进行连接池的应用程序。它已经工作了很长时间了,但是最近我在尝试访问数据库时遇到了以下异常。

com.amazon.carbonado.FetchException: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool@1bdc777 -- timeout at awaitAvailable()

通过谷歌搜索,我发现这是由于 maxPoolSize 已用尽。我将池大小从 25 增加到 100 以检查是否是原因。它已暂时修复,但一段时间后我在尝试数据库连接时再次看到错误(当时没有任何其他数据库连接请求)。当我检查数据库的活动/非活动连接时,v$session 中只有 1 个来自机器的条目。然而我收到了这个错误。我不明白连接在哪里使用?

谁能告诉我为什么会发生这种情况。另外 C3P0 中的 maxPoolSize 代表什么?是那个可以签出的DB连接吗?

poolSize 也代表实际的 dbConnections 吗?

【问题讨论】:

    标签: jdbc database-connection connection-pooling c3p0


    【解决方案1】:

    一些事情。 com.mchange.v2.resourcepool.TimeoutException 表示你设置了一个checkoutTimeout 并且已经超过了。这通常会发生,因为您点击了maxPoolSizeConnections 不会很快返回,但不一定。如果值非常小,Connection 在未达到上限的池中获取可能会引发此问题。

    也就是说,这听起来很像您所拥有的 Connection 泄漏导致池耗尽。 (为了验证,取消设置 checkoutTimeout 并查看您的应用程序是否最终无限期挂起,而不是抛出异常。)如果您正在泄漏连接,您想要

    1. 在管理连接时一定要使用可靠的资源清理习惯——here,点击“显示剩余报价”。

    2. 使用unreturnedConnectionTimeoutdebugUnreturnedConnectionStackTraces 追踪并修复连接泄漏。另见this discussion

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多