【问题标题】:apache-commons-dbcp connection pooling maxActive parameterapache-commons-dbcp 连接池 maxActive 参数
【发布时间】:2019-12-02 11:09:23
【问题描述】:

我们在我们的应用程序中使用 Apache DBCP 1.4 和 Java 后端进行数据库连接池。我们将 maxActive 的值设置为 20(默认情况下),存在请求需要超过 20 个连接才能执行的场景。那时应用程序挂起/无响应。

我已将值增加到 maxActive = 50。然后执行成功完成。在 Apache DBCP 的文档中,我看到我们可以将 maxActive = -1 的值设置为,这不会设置连接创建的上限。 我可以设置 maxActive = -1,如果不能,请帮助我理解为什么它是不可取的,以及我们可以为 maxActive 设置什么下降值,这样我的应用程序就不会挂起/无响应。

【问题讨论】:

  • 应用程序挂起/无响应的情况是什么?这是一个错误吗?
  • 不,这不是代码错误。假设 maxActive 连接限制 = 20,一个请求需要 2 个连接。然后我们并行处理 11 个请求(意味着需要的连接数 = 22),导致服务器无响应。
  • 显示你的配置
  • final BasicDataSource basicDataSource = new BasicDataSource();basicDataSource.setUrl(url);basicDataSource.setUsername(user);basicDataSource.setPassword(password);basicDataSource.setDriverClassName(driver);if (driver.contains("oracle")) {basicDataSource.setValidationQuery("SELECT 1 FROM DUAL");basicDataSource.setValidationQuery("SELECT 1 FROM DUAL");}basicDataSource.setMaxTotal(20);@98765431@s>@98765431@span>

标签: java connection-pooling apache-commons-dbcp


【解决方案1】:

限制 db-Pool 中连接数的动机

  • 通常情况下,客户端可以创建到 DBMS 的最大连接数是有限的。通过限制一个节点可以同时使用的连接数,您可以计算硬限制并避免满足它。
  • 如果您的应用程序存在连接泄漏,这可能会导致单个节点出现错误,而不是整个集群,因此您可以更早地处理它,而不是在 DBMS 停止工作时进行处理,因为所有可能的连接都悬空。

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 2013-01-06
    • 1970-01-01
    • 2019-03-03
    • 2013-09-04
    • 2019-02-10
    • 1970-01-01
    • 2019-10-18
    相关资源
    最近更新 更多