Druid连接池耗尽问题排查总结

背景

生产环境有个关键应用所有节点,每隔几个月就会发生一次Druid连接池耗尽问题,重启后恢复正常。

目前我们还没有定位到问题原因,这边文章主要记录定位过程的一些思路和方法,后续如果找到根本原因,再做更新。

思路

数据库方向

应用连接池耗尽

1、会不会是应用与数据库的连接没有正常断开?

查看故障时数据库socket连接情况,没有发现。

2、会不会是应用执行了很多慢sql?

查看故障时数据库慢sql日志,没有发现。

3、会不会是应用执行了长事务?

查看故障时数据库事务情况,没有发现。

应用方向

应用连接池耗尽

1、会不会是应用受到攻击,突然收到大量请求?

通过对比故障时段和正常时段应用日志量级,没有发现。

2、应用的线程堆栈信息能不能看到什么操作占用大量数据库连接?

应用故障时通过jstack输出堆栈信息,所有线程阻塞在com.alibaba.druid.pool.DruidDataSource.pollLast(DruidDataSource.java:1944),也只有现象没有原因。

Druid方向

思考:能不能在应用故障时,输出Druid连接池活跃连接线程堆栈信息,辅助排查问题?

Druid有提供Web站点查看内部运行信息,地址:应用ip:port/druid/login.html

它有activeConnectionStackTrace-{datasourceId}.json端点可以获取活跃连接线程堆栈信息,datasourceId需要通过datasource.json端点获取输出中Identity的值。让人困惑的是,activeConnectionStackTrace-{datasourceId}.json端点要有输出,需要设置Druid的参数removeAbandoned=true

通过查看源码,我们发现DruidDataSource有getActiveConnectionStackTrace方法,可以获取活跃连接线程堆栈信息。这样我们可以自己在应用中定时检测DruidDataSource活跃连接数量,一旦超过某个阈值,就输出活跃连接线程堆栈信息到日志,辅助排查问题。

总结

这个关键应用连接池耗尽问题存在已有半年之有,一直没能找到根本原因,希望这次借助DruidDataSource输出连接线程堆栈信息能找到问题原因。

如果大家知道原因或有更好的定位方法,请不吝赐教。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: Druid连接池可以用于连接和管理ClickHouse数据库。ClickHouse是一个面向在线分析处理(OLAP)的列式数据库管理系统,支持高速的查询和分析大规模数据。 使用Druid连接池可以提高连接的效率和性能。连接池是一种连接管理机制,通过创建和维护一组预先初始化的数据库连接,应用程序可以通过从连接池获取连接来进行数据库访问操作,而不需要频繁地创建和销毁数据库连接Druid连接池支持连接的复用和管理,可以有效地减少连接的创建和销毁开销,提高数据库操作的效率。连接池可以通过设置最大连接数和最小空闲连接数,自动管理连接的数量,并根据需要动态调整连接的创建和销毁。 在使用Druid连接池连接ClickHouse时,需要先配置连接池的参数,如连接URL、用户名、密码等。然后可以通过从连接池获取连接来进行数据库操作,如执行查询、插入、更新等操作。使用完毕后,需要通过释放连接的方式将连接返回给连接池,以便其他应用程序可以重用该连接Druid连接池还提供了一些额外的特性,如连接的健康检查、连接的超时控制、连接的统计信息等,可以帮助我们更好地管理和监控连接的状态和性能。 总而言之,通过使用Druid连接池连接ClickHouse数据库,可以提高连接的效率和性能,减少连接创建和销毁的开销,并且提供一些额外的特性来管理和监控连接的状态和性能。 ### 回答2: Druid连接池与ClickHouse的结合为企业提供了强大的数据分析和查询功能。Druid是一个用于实时大数据分析的开源分布式数据存储系统,而ClickHouse是一个列式数据库管理系统,专注于高性能的数据存储和查询。 首先,Druid连接池可以通过将ClickHouse作为数据源来实现对ClickHouse数据的访问和查询。通过配置Druid的数据源连接信息,可以将ClickHouse集群加入到Druid连接池中。这样一来,Druid可以将ClickHouse集群中的数据加载到内存中进行高速查询和分析。 Druid连接池与ClickHouse的结合具有以下几个优点。首先,Druid的分段存储机制使得大部分数据都可以在内存中进行操作,因此查询速度非常快。同时,ClickHouse的列式存储方式可以有效地压缩数据,减小存储空间的占用。这样一来,企业可以实现高速的实时数据分析,并且节约存储空间。 其次,Druid与ClickHouse相结合可以实现多维分析。Druid连接池可以将ClickHouse中的数据按照多个维度进行分片和聚合,提供多维度的数据分析功能。企业可以基于Druid连接池对ClickHouse数据进行灵活的查询和分析,获取深入的业务洞察。 最后,Druid连接池与ClickHouse的结合还可以支持高可扩展性。Druid连接池可以通过与ClickHouse集群的横向扩展来处理大规模的数据查询和分析需求。ClickHouse通过水平扩展节点来增加查询和存储的吞吐量,而Druid连接池可以无缝地与扩容的ClickHouse集群进行对接,满足企业日益增长的数据处理需求。 综上所述,Druid连接池与ClickHouse的结合为企业提供了高速、多维的数据分析和查询功能,并支持高可扩展性。这种结合可以帮助企业更好地利用和分析大数据,为业务决策提供准确的依据。 ### 回答3: Druid是一个实时分析大数据的开源项目,而ClickHouse是一个快速的列式存储分析数据库。连接Druid和ClickHouse可以将实时数据分析与大数据存储和查询相结合,从而实现更高效的数据分析和查询。 Druid连接池是一个用于管理Druid连接的工具,它可以提供一个连接池来保存和管理与ClickHouse的连接连接池的主要作用是优化连接的创建和销毁过程,减少连接的创建和销毁开销,从而提高连接的复用率和效率。 使用Druid连接池连接ClickHouse的步骤如下: 1. 配置Druid连接池:首先,我们需要在Druid的配置文件中设置ClickHouse的连接参数,包括ClickHouse的IP地址、端口、用户名和密码等信息。这样Druid连接池才能正确地建立与ClickHouse的连接。 2. 创建连接:接下来,我们可以通过Druid连接池来创建与ClickHouse的连接连接池会根据配置文件中设置的参数来创建连接,同时保持连接的可用性和安全性。 3. 使用连接:一旦连接成功建立,我们就可以使用连接来执行各种ClickHouse的操作,例如查询数据、写入数据等。连接池会自动管理连接的生命周期,包括连接的获取、释放和回收等操作。 4. 释放连接:当我们使用完连接后,应该及时释放连接,以便让连接进入连接池进行重复利用。这样可以避免频繁地创建和销毁连接,提高连接的复用率和效率。 连接池能够有效地管理连接资源,提高连接的利用率。通过连接池连接Druid和ClickHouse,我们可以实现高效的实时数据分析和查询,提升数据处理和分析的效率。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值