shardedJedisPool.getResource()卡住/超时

问题

微服务启动后正常使用,经过一段时间请求一直等待响应,经过调试排错,判断在以下代码处卡死。

1
shardedJedisPool.getResource()

原因

ShardedJedisPool未设置阻塞超时时间,连接建立后未关闭连接,导致连接数达到最大值,阻塞。

BlockWhenExhausted:连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
MaxWaitMillis:获取连接时的最大等待毫秒数(如果设置为阻塞时)

解决

在配置文件中添加maxTotal,maxIdle参数,并在配置类中设置

1
2
3
4
5
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
config.setMaxTotal(maxTotal);
config.setMaxIdle(maxIdle);
config.setMinIdle(minIdle);
return new ShardedJedisPool(config,infoList);

在实际业务结束时将连接关闭

1
shardedJedisPool.close();

虽然修改后已经解决问题,但仍需修改等待时间以防其他bug

1
2
config.setBlockWhenExhausted();
config.setMaxWaitMillis();

[codeleading]: https://www.codeleading.com/article/8583337929/ “jedisPool.getResource()方法长时间无响应并且不报错,方法阻塞”