Java监控数据库连接池活跃与峰值连接数,需通过连接池运行时状态对象获取:Druid调用getActiveCount()和getPoolingCountPeak();HikariCP通过HikariPoolMXBean.getActiveConnections()并自行追踪峰值;推荐集成Micrometer统一上报,同时启用连接泄露检测。

Java 中监控数据库连接池的活跃连接数与峰值,核心在于获取连接池的运行时状态对象,并调用其公开的统计方法。不同连接池实现方式不同,但逻辑一致:通过数据源或管理 Bean 暴露的指标接口读取实时值。
Druid 连接池:直接读取 DruidDataSource 状态
Druid 提供了 DruidDataSource 实例上的原生方法,无需额外依赖即可获取关键指标:
-
活跃连接数:调用
dataSource.getActiveCount() -
峰值活跃数:调用
dataSource.getPoolingCountPeak()(历史最高并发使用连接数) - 也可通过 JMX 获取:
com.alibaba.druid:type=DruidDataSource,name="dataSourceName"下的ActiveCount和PoolingCountPeak属性
HikariCP:使用 HikariPoolMXBean
HikariCP 不直接暴露方法,但提供标准 JMX 接口,推荐通过 HikariPoolMXBean 访问:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
活跃连接数:
poolMXBean.getActiveConnections() -
峰值活跃数:
poolMXBean.getThreadsAwaitingConnection()不是峰值,需自行记录;实际中建议在监控周期内缓存并比对getActiveConnections()的最大值 - 获取 MXBean 示例:
HikariPoolMXBean poolMXBean = dataSource.getHikariPoolMXBean();
通用做法:集成 Micrometer 或自定义定时采集
生产环境不建议手动轮询,应结合指标框架统一上报:
立即学习“Java免费学习笔记(深入)”;
- Druid 支持自动注册到
MetricRegistry(如 Dropwizard Metrics),活跃数指标名为druid.pool.activeConnections - HikariCP 与 Micrometer 集成后,指标为
hikaricp.connections.active和hikaricp.connections.active.max(后者即峰值) - 可配置定时任务(如 Spring @Scheduled),每 10–30 秒采集一次并写入 Prometheus 或日志
注意连接泄露导致的“假峰值”
如果活跃连接数持续高位不降,或峰值远超业务预期,大概率存在连接未 close 问题:
- 启用 Druid 的
removeAbandonedOnBorrow=true和logAbandoned=true可记录泄露堆栈 - HikariCP 对应参数为
leak-detection-threshold=60000(毫秒) - 监控时应同步关注
waitingThreadCount(等待线程数),若长期 > 0,说明连接已被占满且无法释放

















