HikariPool连接池超时问题
文章目录
- HikariPool连接池超时
- 超时异常错误代码
- 可能原因
- 源码
- 解决策略之一
HikariPool连接池超时
超时异常错误代码
2020-04-07 10:42:43.443 [db_crawler housekeeper] WARN com.zaxxer.hikari.pool.HikariPool - db_crawler - Thread starvation or clock leap detected (housekeeper delta=1m35s10ms834µs700ns).2020-04-07 10:43:29.210 [master housekeeper] WARN com.zaxxer.hikari.pool.HikariPool - master - Thread starvation or clock leap detected (housekeeper delta=47s441ms246µs200ns).2020-04-07 10:44:13.808 [db_proc housekeeper] WARN com.zaxxer.hikari.pool.HikariPool - db_proc - Thread starvation or clock leap detected (housekeeper delta=3m46s955ms555µs600ns).
可能原因
- 要么是检测到等待连接的时间过长,造成进程饥饿;要么是检测到时钟跳动,反正最后是关闭了数据库连接。
- 任务被什么进程阻塞
源码
public void run(){try {// refresh values in case they changed via MBeanconnectionTimeout = config.getConnectionTimeout();validationTimeout = config.getValidationTimeout();leakTaskFactory.updateLeakDetectionThreshold(config.getLeakDetectionThreshold());catalog = (config.getCatalog() != null && !config.getCatalog().equals(catalog)) ? config.getCatalog() : catalog;final long idleTimeout = config.getIdleTimeout();final long now = currentTime();// Detect retrograde time, allowing +128ms as per NTP spec.if (plusMillis(now, 128) < plusMillis(previous, HOUSEKEEPING_PERIOD_MS)) {LOGGER.warn("{} - Retrograde clock change detected (housekeeper delta={}), soft-evicting connections from pool.",poolName, elapsedDisplayString(previous, now));previous = now;softEvictConnections();return;}else if (now > plusMillis(previous, (3 * HOUSEKEEPING_PERIOD_MS) / 2)) {// No point evicting for forward clock motion, this merely accelerates connection retirement anyway---没有任何必要将时钟向前移动,这只会加速连接的退出//.....没错,就是它 在这里..................................LOGGER.warn("{} - Thread starvation or clock leap detected (housekeeper delta={}).", poolName, elapsedDisplayString(previous, now));//........................................................}previous = now;String afterPrefix = "Pool ";if (idleTimeout > 0L && config.getMinimumIdle() < config.getMaximumPoolSize()) {logPoolState("Before cleanup ");afterPrefix = "After cleanup ";final List<PoolEntry> notInUse = connectionBag.values(STATE_NOT_IN_USE);int toRemove = notInUse.size() - config.getMinimumIdle();for (PoolEntry entry : notInUse) {if (toRemove > 0 && elapsedMillis(entry.lastAccessed, now) > idleTimeout && connectionBag.reserve(entry)) {closeConnection(entry, "(connection has passed idleTimeout)");toRemove--;}}}logPoolState(afterPrefix);fillPool(); // Try to maintain minimum connections}catch (Exception e) {LOGGER.error("Unexpected exception in housekeeping task", e);}}
解决策略之一
datasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://${ip}:3306/${数据库}?useSSL=false&characterEncoding=UTF-8username: ${username}password: ${password}hikari:auto-commit: true#空闲连接超时时长idle-timeout: 60000#连接超时时长connection-timeout: 60000#最大生命周期,0不过期max-lifetime: 0#最小空闲连接数minimum-idle: 10#最大连接数量maximum-pool-size: 10
HikariPool连接池超时问题相关推荐
- HikariPool连接池配置
HikariPool连接池配置 # Hikari will use the above plus the following to setup connection pooling spring.da ...
- HikariPool 连接池问题
前言:今天在一个项目运行的时候发现一个很奇怪的问题,当我有一段时间无操作之后再进行插入操作的话,就会出现HikariPool相关的报错,在此记录一下 问题 2022-02-20 13:14:04.17 ...
- [转].Net连接池超时注意事项
http://blog.csdn.net/jxqvip/article/details/6738551 超时时间已到.超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并 ...
- 连接池超时配置_HttpClient连接池的一些思考
前言 使用apache的httpclient进行http的交互处理已经很长时间了,而httpclient实例则使用了http连接池,想必大家也没有关心过连接池的管理.事实上,通过分析httpclien ...
- Lettuce连接池超时问题简单记录
使用Lettuce连接池,隔一段时间不连,再去连,就出现超时问题 问题分析定位 解决方案 方案一 方案二 问题分析定位 一直连着没问题,只要间隔一段时间不连,再去连的时候就会出现超时问题,超时几次后就 ...
- node mysql 连接池 超时,关于NodeJS中mysql连接池卡死问题
最近在做毕设,遇到一个问题,就是当我多次请求数据库后就断开了数据库的连接.在网上找了很久答案,最后终于解决了.感谢大神,放上链接. 其实就是被连接池中的释放给坑了 代码中不应该用con.realeas ...
- springboot多数据源配置和HikariPool线程池配置
配置类: 注意 @Primary 注解,他可以理解为优先选择,这下面的代码是一个主要连接,如果需要再加入一个连接的话复制以下代码修改name 吧@Primary注解去掉就行了. 注意spring.da ...
- mysql连接池泄露_一次线上故障:数据库连接池泄露后的思考
作者:陈朗,普兰金融科技能效工程部开发工程师 一:初步排查 早上作为能效平台系统的使用高峰期,系统负载通常比其它时间段更大一些,某个时间段会有大量用户登录.当天系统开始有用户报障,发布系统线上无法构建 ...
- jsp获取连接池的实时连接数_PHP进阶教程-实现一个简单的MySQL连接池
什么是连接池? 顾名思义,连接池就是一堆预先创建好的连接,跟容器会有点像.连接池主要是在某种需要网络连接的服务,提前把连接建立好存起来,然后存放在一个池子里面,需要用到的时候取出来用,用完之后再还回 ...
最新文章
- MySQL带EXISTS关键字的子查询
- 浅析 React Fiber
- 配置struts.xml时extends=struts-default会报错,原因和解决
- css多个属性怎么写,具有多个属性的CSS过渡简写?
- 一键加速去不掉加锁的_老旧油渍去不掉?这几款清洁神器帮你轻松搞定油污难题...
- Android ListView上拉获取下一页
- ROS在rviz中实时显示轨迹(nav_msgs/Path消息的使用)
- 淘宝天猫1688以图搜图,按图搜索商品,API接口调用展示(拍立淘API)
- The Tangled Web: A Guide to Securing Modern Web Applications 原版pdf
- 模拟器android_id,夜神模拟器链接Android studoid
- html页面最大化最小化设置,网页窗口最大化快捷键 改变窗口大小的快捷键是什么...
- 有关802.11的Beacon帧
- 深度学习:透过神经网络的内在灵魂与柏拉图的哲学理念
- java开源规则引擎比较_常用规则引擎比较分析
- 基因组测序中N50和N90到底指什么?
- 在编译前与后调教C语言binary的一种方法
- VQA-CP v2数据集和VQA v2数据集
- 编写1-100中有几个整数是9的倍数
- 【Visual C++】游戏开发笔记三十四 浅墨DirectX提高班之三 起承转合的艺术 Direct3D渲染五步曲
- win10环境下适应pip安装autobahn提示认证失败的问题
热门文章
- docker启动服务命令
- linux同步时间命令
- 解决go包管理代理网址无法访问:proxy.golang.org
- Java 实现递归算法(项目中的简单例子)
- 揭秘Kubernetes为啥互联网公司都在用
- 服务器更改系统属性,右键――服务器属性
- 致我们终将逝去的2018,这一年你都见证了什么?| SIU
- 另一个jar包引不了_分手后,男人多久会爱上另一个女人?答案只有两个字
- 《神奇宝贝》99%的90后都看过吧?Python让我成为了一名训练师!去吧,皮卡丘!
- coreDNS 常见问题及优化方案