无法获取连接,池错误超时等待PutSQL中的空闲对象?

时间:2017-03-22 04:29:24

标签: apache-nifi

我已将并发任务增加为“10'对于PutSQL处理器。

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

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中避免这个问题。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:9)

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

  • 数据库已关闭或无法访问。
  • 连接池(设置为100最大活动状态)没有连接。

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

你可以尝试两件事来避免这种例外:

  1. 您可以在DBCPConnectionPool控制器中增加“最长等待时间” 服务配置。
  2. 您可以增加“最大总连接数”限制 DBCPConnectionPool控制器服务配置。
  3. 请在下面的屏幕截图中找到您需要进行更改的内容。

    enter image description here

    它可能会解决您的问题。

答案 1 :(得分:1)

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

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