连接耗尽
一次外部系统后台多线程调用我的服务时,发生了2次问题,第一次是MySQL连接池耗尽,
Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection;
数据库是MySQL,连接池使用HikariPool,相关配置:
spring.datasource.hikari.minimun-idle=10
spring.datasource.hikari.maximun-pool-size=20
spring.datasource.hikari.connection-timeoiut=3000
并发的请求大约耗时500ms,一共4台实例,按照乐观估计,每秒可以处理2*20*4=160个请求,现在外部请求也就10qps,不至于这么脆弱,刚开始hikari连接池特性问题,查阅各项参数指标,想通过提高连接数来解决问题,后来发现集团建议配置值也是这样,只好本地进行压测,将
spring.datasource.hikari.minimun-idle=1
spring.datasource.hikari.maximun-pool-size=1
先来复现一下报错信息,用Jmete压测后很快出现无法获取连接的异常,于是将配置参数还原至生产配置,进行压测,发现几乎没有异常,全部都正常处理,这样看来不是连接配置问题,开始怀疑是Spring在接口结束后没有释放连接,断点后发现在接口结束时,Spring有拦截器释放连接,这里没有问题。于是继续查看生产日志,突然发现耗时很久的接口