记录一次并发情况下的redis导致服务假死的问题

问题描述

最近项目在做性能压测,框架使用的是 spring boot 2.1.2 + jedis 2.9.1,80个并发持续压测4-5分钟服务就假死,所有的请求就pending,查看服务日志没有任何异常,查看其它没有使用redis的接口都能正常请求。

查找问题思路

  • 查看了一下redis的连接配置,都是正常够用的

  • 再使用jstack看一下堆栈信息

在这里插入图片描述

发现很多WAITING的线程,再往下看都是redis的getResource方法导致的等待。

  • 查看redis的源码Jedis.java

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

猜你喜欢

转载自blog.csdn.net/wagnteng/article/details/126585769