文章 587
评论 5
浏览 230025
数据库连接池泄露检测:连接未归还导致耗尽?HikariCP leakDetectionThreshold 精准定位!

数据库连接池泄露检测:连接未归还导致耗尽?HikariCP leakDetectionThreshold 精准定位!

运营说后台管理页面打不开了。查日志,全是 HikariPool-1 - Connection is not available, request timed out after 30000ms。连接池配了 20 个连接,监控显示全部是 active,一个 idle 都没有。等了十分钟也没恢复——不是流量高,是连接被人借走没还。重启能好,但过两天又犯。 连接泄露比内存泄露更难排查。内存泄露至少还有 heap dump 可以分析,连接泄露你只能看到连接池满了,但看不到是谁借了没还、从哪里借的。等你发现的时候,池子已经空了,所有需要数据库的请求都在排队等超时。 今天聊聊怎么用 HikariCP 自带的一个配置项,把连接泄露的元凶精准揪出来。 连接是怎么被"偷"走的 正常情况下的连接使用流程是这样的: 借连接 → 执行 SQL → 还连接 Spring 的 @Transactional 和 JdbcTemplate 会帮你自动管理这个过程。方法结束,事务提交或回滚,连接自动归还池子。 但有些写法会悄悄地把连接"偷"走: 经典泄露场景:Stream 没关 // ❌ 连接泄露 jdbcTemp....

服务端开发博客:后端架构、高并发、性能优化与微服务实战教程