leak-detection-threshold 是 HikariCP 数据库连接池的一个重要配置参数,用于检测和报告可能的连接泄漏。当一个数据库连接从连接池中被借出后,在指定的时间阈值内没有被归还到连接池,则认为该连接可能是泄漏的。

参数详解

  • 含义
  • leak-detection-threshold 设置了在借出连接后,如果连接未被归还超过设定的毫秒数,HikariCP 将记录一条警告日志,并且可以选择性地抛出异常。
  • 默认值
  • 默认情况下,此参数的值为0,表示关闭连接泄漏检测功能。
  • 单位
  • 时间以毫秒(ms)为单位。
  • 适用场景
  • 适用于那些需要严格监控和管理数据库连接的应用程序,尤其是在高并发环境下,防止因为编程错误导致连接不被正确释放而造成的资源耗尽问题。

使用示例

在 Spring Boot 的 application.propertiesapplication.yml 文件中配置:

spring.datasource.hikari.leakDetectionThreshold=2000

或 YAML 格式:

spring:
  datasource:
    hikari:
      leak-detection-threshold: 2000

这将启用连接泄漏检测,并设置阈值为2秒。如果一个连接在被借出后的2秒内没有被归还,HikariCP 会记录一条警告日志。

注意事项

  1. 性能影响
  • 启用此选项会在每次借出连接时增加一点额外的开销,因此应根据实际需求权衡是否开启以及设置合适的阈值。
  1. 误报可能性
  • 如果应用程序中有长时间运行的查询或者事务处理,可能会触发虚假的泄漏警告。在这种情况下,可以适当调整阈值以避免误报。
  1. 堆栈跟踪信息
  • 当检测到连接泄漏时,HikariCP 可以打印出完整的堆栈跟踪信息,帮助定位代码中的问题位置。但是,频繁的堆栈跟踪输出会对性能产生负面影响,所以在生产环境中应该谨慎使用。
  1. 自动关闭连接
  • 即使启用了泄漏检测,它并不会自动关闭泄露的连接;它仅提供预警机制。确保你的应用程序逻辑正确地管理和关闭所有打开的连接仍然是关键。
  1. 与应用服务器集成
  • 在某些应用服务器(如 Tomcat)中,它们自带的连接池管理器也可能有类似的泄漏检测功能。如果你的应用部署在这样的环境中,请确保理解两者之间的交互,以免造成混淆。