【问题标题】:Cannot get a connection, pool error Timeout waiting for idle object in PutSQL?无法获得连接,池错误超时等待 PutSQL 中的空闲对象?
【发布时间】:2017-03-22 04:29:23
【问题描述】:

我已将 PutSQL 处理器的并发任务增加到“10”。

当时它显示以下错误但没有数据丢失。

failed to process due to org.apache.nifi.processor.exception.ProcessException: org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object; rolling back session: 

如果我删除了并发任务,那么它可以正常工作

虽然谷歌这个异常我在下面的链接中找到了答案

I am getting Cannot get a connection, pool error Timeout waiting for idle object, When I try to create more than 250 threads in my web application

但我不知道如何在 NiFi putSQL 中避免这个问题。

谁能帮我解决这个问题?

【问题讨论】:

    标签: apache-nifi


    【解决方案1】:

    当池管理器无法与等待的请求者建立可行的连接并且 maxWait 已通过因此触发超时时,会发生此异常。 原因有多种,但通常分为两大类:

    • 数据库已关闭或无法访问。
    • 连接池(设置为最大 100 个活动)连接不足。

    nifi 中的 DBCPConnectionPool 控制器服务默认最大连接数为 8,最大等待时间为 500 毫秒。当 PutSQL 处理器从 DBCP 池中占用 8 个连接时,当它请求第 9 个连接或超过最大连接限制时,将抛出“无法获取连接”异常。

    您可以尝试 2 件事来避免此异常:

    1. 您可以在 DBCPConnectionPool 控制器中增加“最大等待时间”
      服务配置。
    2. 您可以在 DBCPConnectionPool 控制器服务配置。

    请在下面的屏幕截图中找到您需要进行更改的地方。

    它可能会解决您的问题。

    【讨论】:

      【解决方案2】:

      如果某些连接从未关闭,因此它们不会再次在池中可用,则可能会发生此异常。 所以越来越多的连接保持打开状态,直到达到最大值。

      确保所有线程都在关闭使用的连接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-08
        • 1970-01-01
        • 2015-07-11
        • 2013-12-22
        • 1970-01-01
        • 2013-10-01
        • 1970-01-01
        • 2012-07-28
        相关资源
        最近更新 更多