方向不对,努力白费,经验类测试技术才是职场重要保险! | (点击→)【提醒】AI赋能的前提是对常规测试技术非常的熟悉,联系作者vx了解

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  全栈测试笔记  阅读(1207)  评论(0)    收藏  举报
浏览器标题切换
浏览器标题切换end