监控数据库连接池需通过运行时接口实时获取指标:Druid调用getActiveCount()、getPoolingCount()等方法;HikariCP通过HikariPoolMXBean或Micrometer指标;结合等待线程数与泄漏检测综合分析。

监控数据库连接池的活跃连接与空闲连接,关键是通过连接池提供的运行时状态接口实时读取指标,而不是依赖静态配置或猜测。不同连接池实现方式略有差异,但核心思路一致:调用公开方法或 JMX Bean 获取当前值。
Druid 连接池:直接调用方法获取
Druid 提供了线程安全、开箱即用的统计方法:
-
活跃连接数:调用
dataSource.getActiveCount()—— 返回当前正在被业务代码使用的连接数量 -
空闲连接数:调用
dataSource.getPoolingCount()—— 即池中未被占用、可立即分配的连接数 -
等待线程数:调用
dataSource.getWaitThreadCount()—— 若该值长期大于 0,说明连接已耗尽,后续请求在排队
这些方法无需反射、不依赖外部框架,适合嵌入健康检查接口或定时日志输出。
HikariCP:通过 HikariPoolMXBean 访问
HikariCP 不直接暴露 getter 方法,但默认启用 JMX(需配置 spring.datasource.hikari.register-mbeans=true):
立即学习“Java免费学习笔记(深入)”;
-
活跃连接数:通过
poolMXBean.getActiveConnections() -
空闲连接数:通过
poolMXBean.getIdleConnections() -
总连接数:通过
poolMXBean.getTotalConnections()
获取 MXBean 示例:
HikariPoolMXBean poolMXBean = dataSource.getHikariPoolMXBean();
注意:首次调用前至少要成功获取过一次连接,否则 MXBean 可能未初始化,导致 UndeclaredThrowableException。
统一上报:集成 Micrometer + Prometheus
生产环境推荐走指标采集标准路径,避免手动轮询:
- Druid 集成 Micrometer 后,指标为
druid.pool.activeConnections和druid.pool.idleConnections - HikariCP(v5+)原生支持 Micrometer,对应指标是
hikaricp.connections.active和hikaricp.connections.idle - 配合 Prometheus 定期拉取,再用 Grafana 做趋势图和阈值告警(例如活跃连接持续 > 90% maxPoolSize)
辅助判断:结合等待线程与连接泄漏检测
单看活跃/空闲数不够,需联动分析:
- 若 活跃数高且长期不降,同时 空闲数为 0、等待线程数 > 0,极可能有连接未 close
- Druid 开启
removeAbandonedOnBorrow=true和logAbandoned=true,可打印泄露堆栈 - HikariCP 设置
leak-detection-threshold=60000(单位毫秒),超时未归还会触发 WARN 日志


















