com.alibaba.druid.pool.GetConnectionTimeoutException:
#
用户问题 :com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 40000, active 20, maxActive 20
#
专家官方解答 :根据提供的知识内容,针对您遇到的问题druid-datasource com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 40000, active 20, maxActive 20
,以下是详细的分析与解决步骤:
#
问题分析:异常说明:此异常表明您的应用程序尝试从Druid数据库连接池获取连接时超时。具体来说,应用程序等待了40秒(即wait millis 40000),但因为当前活跃的连接数(active 20)已经达到最大连接数(maxActive 20),无法提供新的连接,从而导致超时。
潜在原因:这通常意味着有大量查询或事务正在执行,占用了所有可用连接,且执行时间超过了预期,或者应用程序在执行完毕后没有及时释放连接。
#
解决步骤:#
确认慢SQL- 检查MySQL慢查询日志:首先,您应查看MySQL的慢查询日志,以识别是否有执行时间过长的SQL语句。这将帮助您定位到可能的性能瓶颈。
#
调整Druid配置以收集更多信息- 启用Druid的废弃连接回收设置:临时修改Druid配置,以便在连接借用超过特定时间(如180秒)后,强制回收连接并记录相关信息。这将帮助您追踪到占用连接的线程和SQL。注意:请在定位问题后及时关闭此配置,因为它可能导致正常请求因连接被强制回收而失败。
<!-- 超过时间限制是否回收 --><property name="removeAbandoned" value="true" /><!-- 超时时间;单位为秒。180秒=3分钟 --><property name="removeAbandonedTimeout" value="180" /><!-- 关闭abandoned连接时输出错误日志 --><property name="logAbandoned" value="true" />
#
优化或增加连接数- 优化SQL:一旦发现慢查询,优先优化这些SQL语句,减少其执行时间和资源消耗。
- 调整连接池参数:如果SQL优化后问题依然存在,或确认应用确实需要更多并发连接,可以适当增加
maxActive
(最大活动连接数)的值,以允许更多的并发操作。
#
解释:- 通过检查慢查询日志和启用Druid的废弃连接回收机制,我们可以直接定位到导致连接池耗尽的根源,进而采取针对性措施。
- 优化SQL能够从根本上提高数据库操作的效率,减少连接占用时间。
- 调整连接池参数是一种临时解决方案,旨在提高系统在高并发情况下的容错能力,但过度增加连接数可能会加重数据库负担,因此需要谨慎操作。
综上所述,解决此问题的关键在于识别并优化慢查询,同时合理配置Druid连接池以适应应用的实际需求。
---------------#
参考链接 :- 专家经验:链接超时问题处理
- 专家经验:Druid springboot 集成
#
答疑服务说明:本内容经由技术专家审阅的用户问答的镜像生成,我们提供了专家智能答疑服务,在页面的右下的浮窗”专家答疑“。您也可以访问 : 全局专家答疑 。 咨询其他产品的的问题
#
反馈如问答有错漏,欢迎点:差评给我们反馈。