SpringBoot + 连接池获取超时排查:HikariCP 获取连接超时?自动 dump 线程栈定位
一、连接池获取超时的痛点 上周,一位做支付系统的朋友吐槽:他们的系统在高峰期经常出现接口超时的问题,日志里大量报错 "Connection is not available, request timed out after 30000ms"。 "我们已经把连接池最大数调到了 50,"他说,"但还是不够用,一到高峰期就出问题。" 我查看了他们的系统,发现问题确实很严重: 系统在高峰期 TPS 约 2000 数据库连接池最大 50 个 平均接口耗时 150ms 理论上 50 个连接每秒能处理约 333 个请求,但实际高峰需要 2000 TPS 每次接口需要访问数据库 3-5 次 更关键的是,他们根本不知道连接都去哪了,是哪些SQL慢查询占用了连接,还是存在连接泄漏? 二、传统排查方案的局限性 1. 手动查看日志 通过日志查看哪些接口慢、哪些SQL执行时间长。 这种方案的问题: 滞后性:问题已经发生,只能事后分析 信息不全:只知道某个接口慢,不知道当时系统整体状态 无法定位根因:看到的是表象,不是根因 耗时耗力:需要大量时间分析日志 2. 手动dump线程 通过 jstack 或 A....