Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >十二、Hikari:Apparent connection leak detected连接泄露分析

十二、Hikari:Apparent connection leak detected连接泄露分析

原创
作者头像
用户1422411
发布于 2022-06-25 09:56:43
发布于 2022-06-25 09:56:43
3.2K0
举报

欢迎访问我的博客,同步更新: 枫山别院

部分报错日志如下:

代码语言:txt
AI代码解释
复制
16-05-2019 13:25:46.494 [HikariPool-1 housekeeper] WARN  com.zaxxer.hikari.pool.ProxyLeakTask.run - Connection leak detection triggered for com.mysql.jdbc.JDBC4Connection@7c3beffb, stack trace follows
java.lang.Exception: Apparent connection leak detected
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
    at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:84)
    at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:70)
    at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:336)
    at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:84)
    at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
    at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
    at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)
    at sun.reflect.GeneratedMethodAccessor148.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:434)
    at com.sun.proxy.$Proxy107.selectOne(Unknown Source)
    at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:167)

日志显示,检测到了连接泄露

Hikari配置如下:

代码语言:txt
AI代码解释
复制
hikari:
      maximum-pool-size: 100
      minimum-idle: 0
      leak-detection-threshold: 180000
      connection-timeout: 180000
      validation-timeout: 180000
      idle-timeout: 180000

leak-detection-threshold:用来设置连接被占用的超时时间,单位为毫秒,默认为0,表示禁用连接泄露检测。

connection-timeout:从连接池获取连接的超时时间。

分析源代码发现,该错误的原因是从连接池获取连接超时,触发了连接泄露检测。

此处spring调用了doGetConnection从hikari中获取连接,

在org.springframework.jdbc.datasource.DataSourceUtils#doGetConnection中,

image.png
image.png

我们看看hikari中的实现,,进入该方法继续看,

com.zaxxer.hikari.HikariDataSource#getConnection()

image.png
image.png

在com.zaxxer.hikari.pool.HikariPool#getConnection(long)中,

image.png
image.png

com.zaxxer.hikari.pool.ProxyLeakTask#ProxyLeakTask(com.zaxxer.hikari.pool.ProxyLeakTask, com.zaxxer.hikari.pool.PoolEntry)中

image.png
image.png

这个地方是真正的获取连接的实现了,

分析上面的代码会发现,在获取Connection的时候,创建了一个ProxyLeakTask,这个task是一个定时任务,在leakDetectionThreshold毫秒后调用run()方法抛出Apparent connection leak detected异常。

image.png
image.png

也就是说,获取到连接之后使用之前的时间+使用连接的时间+使用之后还回连接之前的时间,超出了leakDetectionThreshold毫秒,就抛出检测到连接泄露的异常。结合我们的业务发现,此处确实是使用连接的时间超出了leakDetectionThreshold毫秒,是因为执行了慢 sql,同时慢 sql 耗尽了连接池的连接,导致新线程获取连接超时,又导致了获取连接超时的报错。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
HikariPool-1 - Connection is not available, request timed out after 30000ms
Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.
程序员子龙
2024/01/05
1.9K0
druid连接池泄露
当程序存在缺陷时,申请的连接忘记关闭,这时候,就存在连接泄漏了 我们使用druid时,可以配置如下参数进行用来关闭长时间不使用的连接 spring: # 数据源配置 datasource: druid: # 统计监控信息 web-stat-filter: enabled: true # 可视化展示Druid的统计信息 stat-view-servlet: enabled: true filter:
阿超
2022/08/21
1.9K0
HikariPool 连接池问题
问题描述: 腾讯云上 centos7 安装的 mysql 5.7.27,SpringBoot 使用 Hikaricp 连接池连接 MySQL。
全栈程序员站长
2022/09/10
4.1K2
HikariPool 连接池问题
mybatis连接oracle
原因:oracle jdbc并不能向mysql那样直接配置,原因是Oracle授权问题,Maven不提供oracle JDBC driver,需要手动配置下,这里直接去官网下载,将jar包手动导入idea中
微醺
2019/01/17
1.7K0
Tried to send an out-of-range integer as a 2-byte value
Cause: org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
二锅头一桶天下
2024/06/26
2420
公司新来一个干练小伙,把 MyBatis 替换成 MyBatis-Plus,上线后哭晕在厕所。。。
一个老项目,数据库用的是 MySQL 5.7.36 , ORM 框架用的 MyBatis 3.5.0 , mysql-connector-java 版本是 5.1.26
搜云库技术团队
2024/05/11
2240
公司新来一个干练小伙,把 MyBatis 替换成 MyBatis-Plus,上线后哭晕在厕所。。。
java.sql.SQLException: connection holder is null
java.sql.SQLException: connection holder is null
一个会写诗的程序员
2018/08/17
2.1K0
Spring整合mybatis中的sqlSession是如何做到线程隔离的?
项目中常常使用mybatis配合spring进行数据库操作,但是我们知道,数据的操作是要求做到线程安全的,而且按照原来的jdbc的使用方式,每次操作完成之后都要将连接关闭,但是实际使用中我们并没有这么干。
用户5546570
2019/06/06
1.2K0
springboot整合mybatis报错
运行测试时报错如下 CLIENT_PLUGIN_AUTH is required
暴躁的程序猿
2022/03/23
3150
PageHelper不安全的分页问题,导致ParserException: syntax error, error in :'it 1 LIMIT ? ', expect LIMIT, actual
项目中使用PageHlper插件进行分页,今日发现有多处SQL查询语句都出现了如下的报错。
翎野君
2023/05/12
4080
Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8E\xB1' for
最近在做关于社交项目时,有一个发红包功能,其中涉及到红包描述,一直报错,后来看日志,才发现竟是因为输入了Emoji表情的原因,由于我的mysql数据库是utf8字符集,而且Emoji表情等特殊符号要占四个字节,所以导致数据库不能正常存入。
一诺千金
2020/04/30
1.6K0
springboot2.0配置多数据源出错HikariPool-1 - jdbcUrl is required with driverClassName.
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
3.4K0
mybatis 核心原理 线程隔离
建议同时学习@Transaction, spring对事务的管理 spring @Transactional原理
平凡的学生族
2020/01/02
9170
性能调优之mysql线程池优化
对Nginx域名转发做了个压测,结果不大理想,jmeter哗哗的报错,nginx连接全是超时,tps波动特别大。如下图
飞天小子
2021/09/26
1.7K0
性能调优之mysql线程池优化
ShardingSphere分库分表schema名称导致NPE问题排查记录
前段时间把 ShardingSphere 升级到了 5.1.1 版本,奈何官方版本升级太快跟不上速度,这不最近又发现了一个 BUG。
艾小仙
2023/02/24
9300
ShardingSphere分库分表schema名称导致NPE问题排查记录
In aggregated query without GROUP BY...this is incompatible with sql_mode=only_full_group_by
这种修改,不持久化,重启数据库后会再次出现此问题,所以,我们需要将此设置持久化到配置文件中。 首先找到mysql的配置文件,不同安装方式,配置文件位置或者名字不一样,我这里是my.cnf,未修改前内容如下:
IT云清
2022/05/07
1.1K0
In aggregated query without GROUP BY...this is incompatible with sql_mode=only_full_group_by
解析SQLSyntaxErrorException异常:not in GROUP BY clause
大家好,欢迎阅读我们的文章。今天,我们将讨论一个常见的Java异常——java.sql.SQLSyntaxErrorException,并深入探讨其中一个具体的错误信息:Expression #1 of SELECT list is not in GROUP BY clause。
修己xj
2023/08/25
6070
解析SQLSyntaxErrorException异常:not in GROUP BY clause
都说了能不动就别动,非要去调整,出生产事故了吧
  一个老项目,数据库用的是 MySQL 5.7.36 , ORM 框架用的 MyBatis 3.5.0 , mysql-connector-java 版本是 5.1.26
青石路
2024/02/24
1670
都说了能不动就别动,非要去调整,出生产事故了吧
In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'c
数据库查询时,出现如下错误: Caused by: com.mysql.jdbc.exceptions.jdbc4MySQLSyntaxErrorException: In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'credit_server.credit.id'; this is incompatible with sql_mode=only_full_gro
IT云清
2019/03/19
17.6K2
In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'c
HikariPool-1 - Exception during pool initialization. Springboot 默认选择的mysql问题
samRsa
2025/02/24
2100
推荐阅读
相关推荐
HikariPool-1 - Connection is not available, request timed out after 30000ms
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档