开发者社区 问答 正文

使用阿里druid连接池,连接池里面的连接数少于minIdle的时候,出现并发请求的时候,池中连接数

使用阿里druid连接池,连接池里面的连接数少于minIdle的时候,出现并发请求的时候,池中连接数不增加,反而越来越少

我遇到了这个问题,刚好在开源中国看到,希望能够得到阿里云官方的回复,请查看

展开
收起
因为相信,所以看见。 2020-05-24 12:33:31 1478 分享 版权
阿里云 AI 助理回答

Druid连接池是阿里巴巴开源的数据库连接池实现,它具有高性能、低消耗、功能全面等特点。关于您提到的问题,当连接池中的连接数少于配置的minIdle时,理论上Druid应该会尝试补充连接以维持至少minIdle数量的连接。如果遇到并发请求导致连接数不增反减的情况,可能涉及以下几个方面的原因:

  1. 配置问题:请检查您的Druid配置是否正确设置了initialSize(初始连接数)、minIdle(最小空闲连接数)和maxActive(最大活跃连接数或最大总连接数)。确保这些值设置得当,并且没有配置冲突。

  2. 连接泄露:这是最常见的原因之一。如果应用程序中存在未关闭的数据库连接,即使有空闲连接,也会因为实际使用的连接超过maxActive而无法创建新的连接。请确保所有数据库操作后都正确关闭了连接,或者使用try-with-resources等机制自动管理资源。

  3. 检测时间与补充策略:Druid提供了timeBetweenEvictionRunsMillis配置项来设定检测空闲连接并进行回收的时间间隔。如果这个时间设置得太长,可能导致空闲连接未及时被发现和补充。同时,minEvictableIdleTimeMillis定义了一个连接在池中保持空闲而不被驱逐的最长时间,过短可能导致有效连接被误删。

  4. 异常处理:检查Druid的日志输出,看是否有任何异常信息,比如数据库连接失败、网络问题等,这些问题也可能导致连接池无法按预期补充连接。

  5. 线程池限制:在高并发场景下,如果应用自身的线程池已满,可能会间接影响到连接池的补充逻辑,因为创建新连接的操作也是由线程执行的。

解决建议: - 确认配置无误,特别是上述提到的关键参数。 - 使用Druid提供的监控功能,检查连接池的状态,包括活跃连接数、空闲连接数以及是否有异常情况。 - 检查代码中数据库操作的资源管理,确保没有连接泄露。 - 调整检测和回收空闲连接的时间间隔,使其更适应当前系统的负载情况。 - 查看系统日志和Druid日志,寻找可能的错误提示或异常信息。 - 如果问题依然存在,考虑升级Druid版本,查看是否为已知bug并已在新版本中修复。

希望这些建议能帮助您解决问题。如果需要进一步的技术支持,也可以考虑在阿里云官方论坛或Druid的GitHub项目页面提交问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: