主流:JDBC 连接池(HikariCP、Druid),核心监控目标:连接数、等待队列、活跃连接、空闲连接、泄漏、慢 SQL、使用率,用于发现连接耗尽、连接泄漏、池过小 / 过大等线上故障。
一、连接池核心指标(必须监控)
最危险信号:
pendingConnections > 0,业务线程拿不到连接排队,接口超时雪崩。

二、HikariCP 监控方案(SpringBoot 默认)
HikariCP 通过 Micrometer Metrics 暴露指标,SpringBoot2 + 自动集成。
1. 依赖准备
<!-- micrometer 监控,输出prometheus指标 -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
application.yml
spring:
datasource:
hikari:
maximum-pool-size: 10
minimum-idle: 2
leak-detection-threshold: 30000 # 30s未归还判定疑似泄漏,开发环境打开
management:
endpoints:
web:
exposure:
include: prometheus,metrics
2. HikariCP 关键 metrics 指标名
# 活跃连接
hikaricp_connections_active
# 空闲连接
hikaricp_connections_idle
# 等待队列(等待获取连接的线程数)
hikaricp_connections_pending
# 总连接数
hikaricp_connections_total
# 获取连接耗时 histogram
hikaricp_connection_acquired_nanos_seconds
# 连接创建耗时
hikaricp_connection_creation_nanos_seconds
3. Grafana Prometheus 查询示例
# 连接池使用率
hikaricp_connections_active / hikaricp_connections_max
# 等待队列大于0告警
hikaricp_connections_pending > 0
HikariCP没有内置页面,靠 metrics 输出,对接 Prometheus+Grafana 可视化。
4. 开发调试:编程获取 HikariPoolMXBean
可以代码 / JConsole JMX 查看
HikariDataSource ds = (HikariDataSource) dataSource;
HikariPoolMXBean poolBean = ds.getHikariPoolMXBean();
// 当前活跃
int active = poolBean.getActiveConnections();
// 空闲
int idle = poolBean.getIdleConnections();
// 等待队列
int pending = poolBean.getPendingConnections();
// 总连接
int total = poolBean.getTotalConnections();
三、Druid 连接池监控(阿里)
Druid 能力更强:内置监控页面、JMX、Metrics、慢 SQL、连接泄漏、防火墙。
1. SpringBoot 配置,开启监控面板
spring:
datasource:
druid:
max-active: 10
min-idle: 2
# 开启监控统计
filters: stat,wall,log4j2
web-stat-filter:
enabled: true
stat-view-servlet:
enabled: true
login-username: admin
login-password: admin123
allow: 127.0.0.1
访问地址:http://ip:port/druid 页面直接查看:连接池、活跃连接、空闲、等待、SQL 执行统计、慢 SQL。
2. Druid Metrics(对接 Prometheus)
使用 druid-spring-boot-starter + micrometer,指标前缀 druid_*
druid_pool_active_count #活跃连接
druid_pool_idle_count #空闲
druid_pool_wait_thread_count#等待线程数
druid_pool_max_active #最大连接
druid_sql_query_duration_sum #SQL耗时
3. JMX 方式监控 DruidDataSourceMBean
JConsole 可以直接查看全部池状态。
四、监控体系完整落地方案
方案 A:生产标准方案(推荐)
SpringBoot 应用 + Micrometer + Prometheus + Grafana
开启连接池 metrics 埋点(Hikari/Druid)
Prometheus 定时拉取
/actuator/prometheusGrafana 配置大盘展示:活跃、空闲、等待队列、使用率、获取连接 P95 耗时
配置告警规则
hikaricp_connections_pending > 0:P0 告警,连接池排队连接池使用率持续 > 85%:预警,评估调大 maxPoolSize
获取连接 P95 耗时 > 500ms:池子压力大
连接泄漏指标出现数值:代码未 close 连接
方案 B:简单调试(开发 / 小项目)
Druid:直接访问内置 druid 监控页面
Hikari:JConsole JMX 查看 HikariPoolMXBean,或者写接口把池状态输出
方案 C:日志监控
Hikari:
leak-detection-threshold泄漏检测,打印 warn 日志,发现连接泄漏Druid stat filter 输出慢 SQL 日志
⚠️ leak 检测不要在生产开太小阈值,会误报,一般设置 20‑30 秒。

五、常见故障通过监控识别
连接耗尽,接口大量超时 监控现象:
pendingConnections >0,active 接近 max,idle=0。 原因:max 太小 / SQL 慢导致连接迟迟不释放 / 连接泄漏。连接泄漏 监控现象:active 持续上涨,idle 不断降到 0,重启恢复;泄漏检测日志打印栈。 根因:
Connection/Statement/ResultSet没有关闭;try‑with‑resources 没写。池子频繁创建销毁连接 监控:connection_creation 计数频繁上涨。 原因:min‑idle 设置过小,idle 超时回收频繁。
数据库侧视角辅助核对 在数据库执行
show processlist;(MySQL)查看真实客户端连接数,对比连接池指标,确认是否真实建立物理连接。
六、最佳实践建议
优先监控 pendingConnections,这是最优先告警指标,比单纯看活跃连接更关键。
HikariCP 生产优先使用,Druid 适合需要 SQL 审计、内置监控页面场景。
不要盲目调大 maxPoolSize:数据库单实例能承载连接有限,过大反而压垮 DB。
开发环境打开泄漏检测,生产环境谨慎,阈值设置 20‑30s。
必须结合数据库侧连接数监控,两边对照排查。
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢