资讯详情

一次故障分析:HikariPool-1 - Connection is not available

最近,我在生产中遇到了一个问题。我花了很多时间来解决它,并询问了很多其他人的文章。写下来,我希望能帮助别人。

背景:

程序是基于JDK1.8x,SpringBoot2.x 开发。连接是Oracle 11G数据库。通过运行环境PaaS在云上部署平台。SpringBoot2.x 内置的就是Hakari 连接池。

故障现象:

1.一段时间后,应用报告无法连接数据库。

hold异常信息在请求后会被抛出,关键内容是:HikariPool-1 -Connection is not available,request timed out after 954466ms.

2.另一个特点是:基本上每隔一个小时左右就会有以下日志:HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=54s566ms151μs86ns)

问题分析过程:

根据这些关键词,我搜索了很多文章,有各种各样的说法。其中,下面描述的现象是最接近的。

https://github.com/brettwooldridge/HikariCP/issues/679

还有这个:

MuleSoft Help Center

也有这篇:

Spring Boot 中使用 Hikari,我不会 - 掘金

没有解决我的问题。

因为我用的基本都是Hikari缺失配置。Hikari无需设置大量配置项目,缺乏足够的配置。

一开始以为是maxLifetime该值的设置和数据库本身的设置存在问题。例如,前者大于后者,导致前者大于后者pool里面的连接坏了。但是,调整这个值是错误的。

故障的真正原因:

持续了几天都没有解决。后来在一次debug当代码发现连接池启动时,总是提示:Driver does not support get/set network timeout for connections

此提示信息以前一直存在,因为它只是一个普通的提示,并且在单元测试中不影响数据库连接的使用,所以它并没有被认真对待。

结合这一点,我突然意识到可能是数据库Driver版本问题pom果然,文件是用的jdbc6。

修改pom文件:改为:

 <dependency>             <groupId>com.oracle</groupId>             <artifactId>ojdbc8</artifactId>             <version>12.2.0.1</version>  </dependency> 

问题解决!

感想

当别人遇到问题时,现象可能和你一样,但原因可能不同。

标签: ld50s激光传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司