当前位置:   article > 正文

Caused by: redis.clients.jedis.exceptions.JedisException: Could not get a resource from the pool_caused by: redis.clients.jedis.exceptions.jedisdat

caused by: redis.clients.jedis.exceptions.jedisdataexception:could not get a

公司的一个项目上线后,由于该项目每天访问的人很多,并发也不小,在该项目上线运行半个月个后出现了 redis.clients.jedis.exceptions.JedisException: Could not get a resource from the pool的问题,然后通过重新构建暂时解决了,可是过了一个星期后又出现了同一个问题,后面通过分析有可能是jedis连接池配置的连接数小了,后面改成1000,过了半个月后还是出现同样的问题,接着又改了jedis的连接超时间最后也没有解决问题;项目这个问题持续了半年,最后通过查看jedis不同版本的连接池关闭断开的代码,发现了问题最终存在。
当时项目中使用的jedis版本是2.8.2,当时这个版本的连接关闭代码(Jedis.java):

 public void close() {
        if (this.dataSource != null) {
            if (this.client.isBroken()) {
                this.dataSource.returnBrokenResource(this);
            } else {
                this.dataSource.returnResource(this);
            }

            this.dataSource = null;
        } else {
            super.close();
        }

    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

jedis:2.10.2版本的jedis的close代码:

public void close() {
        if (this.dataSource != null) {
            Pool<Jedis> pool = this.dataSource;
            this.dataSource = null;
            if (this.client.isBroken()) {
                pool.returnBrokenResource(this);
            } else {
                pool.returnResource(this);
            }
        } else {
            super.close();
        }

    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

所以最后解决办法是升级jedis版本,因为2.10.2版本有jedis连接池泄露的问题

			<dependency>
	            <groupId>redis.clients</groupId>
	            <artifactId>jedis</artifactId>
	            <version>2.10.2</version>
            </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/672630
推荐阅读
相关标签
  

闽ICP备14008679号