遇一山,过一山,处处有风景;只要勇敢向前,一路尽是繁花盛开。 | (点击查看→)【测试干货】python/java自动化、持续集成、性能、测开、简历、笔试面试等

springboot假死、连接泄漏

springboot版本:2.1.4.RELEASE

默认自带redis版本:2.9.1

服务在注册中心还是up状态

jstack有大量waiting线程

- parking to wait for,等待锁定同一个地址的线程和线程池最大配置一样
 

 

https://www.cnblogs.com/uncleyong/p/11136396.html

 

package redis.clients.jedis;下的JedisPool  

    public Jedis getResource() {
        Jedis jedis = (Jedis)super.getResource();  // 这里与close互相影响,造成线程不安全
        jedis.setDataSource(this);
        return jedis;
    }

  

 

package redis.clients.jedis;下的Jedis 

  @Override
  public void close() {
    if (dataSource != null) {
      if (client.isBroken()) {  // 判断redis是否可以连接
        this.dataSource.returnBrokenResource(this);
      } else {
        this.dataSource.returnResource(this);  // 归还redis连接
      }
      this.dataSource = null;  // 置为null;执行这行前,连接可能被其它线程借走
    } else {
      super.close();
    }
  }

 

修改方案:

https://github.com/redis/jedis/pull/1918/commits/df1bffa3c77f4ede4c912f2c3e78b5c8857725e7

 

posted @ 2021-04-24 16:45  全栈测试笔记  阅读(1057)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end