shardedJedisPool.getResource()卡住/超时
问题
微服务启动后正常使用,经过一段时间请求一直等待响应,经过调试排错,判断在以下代码处卡死。
1 | shardedJedisPool.getResource() |
原因
ShardedJedisPool未设置阻塞超时时间,连接建立后未关闭连接,导致连接数达到最大值,阻塞。
BlockWhenExhausted:连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
MaxWaitMillis:获取连接时的最大等待毫秒数(如果设置为阻塞时)
解决
在配置文件中添加maxTotal,maxIdle参数,并在配置类中设置
1 | GenericObjectPoolConfig config = new GenericObjectPoolConfig(); |
在实际业务结束时将连接关闭
1 | shardedJedisPool.close(); |
虽然修改后已经解决问题,但仍需修改等待时间以防其他bug
1 | config.setBlockWhenExhausted(); |
[codeleading]: https://www.codeleading.com/article/8583337929/ “jedisPool.getResource()方法长时间无响应并且不报错,方法阻塞”