我的Elasticache Redis节点中的当前连接数不断增加

add*_*990 8 java tomcat redis jedis amazon-elasticache

我在tomcat web应用程序中使用Jedis连接到Elascticache Redis节点.该应用程序在白天被数百名用户使用.我不确定这是否正常,但每当我使用cloudwatch指标检查当前连接数时,我看到当前连接增加而不会下降.

这是我的Jedis池配置:

public static JedisPool getPool(){
        if(pool == null){
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMinIdle(5);
            config.setMaxIdle(35);
            config.setMaxTotal(1500);
            config.setMaxWaitMillis(3000);
            config.setTestOnBorrow(true);
            config.setTestWhileIdle(true);
            pool = new JedisPool(config, PropertiesManager.getInstance().getRedisServer());
        }
        return pool;    
    }
Run Code Online (Sandbox Code Playgroud)

这就是我总是使用池连接来执行redis命令的方法:

        Jedis jedis = JedisUtil.getPool().getResource();
        try{
            //Redis commands
            }
        catch(JedisException e){
            e.printStackTrace();
            throw e;
        }finally{
            if (jedis != null) JedisUtil.getPool().returnResource(jedis);
        }
Run Code Online (Sandbox Code Playgroud)

使用这种配置,计数目前超过200.我是否遗漏了应该丢弃或杀死未使用连接的内容?我将maxIdle设置为35,我预计当流量非常低时,计数会下降到35,但这种情况从未发生过.

小智 9

我们遇到了同样的问题.在进一步调查之后,我们遇到了这个问题(来自redis官方文档 - http://redis.io/topics/clients):

默认情况下,如果客户端空闲了很多秒,则Redis的最新版本不会关闭与客户端的连接:连接将永远保持打开状态.

默认情况下,aws提供的超时值为0.因此,即使客户端初始化的连接已关闭,使用redis实例初始化的任何连接也将由redis保留.

在aws中创建一个新的缓存参数策略,其超时不等于0,那么你应该是好的

  • 哇,非常感谢。我会花几个小时研究这个。我刚刚检查了我的第一个 ElastiCache 实例的监控,惊讶地发现过去一周的连接数几乎呈线性增长。我肯定会更新设置。 (2认同)

小智 5

在缓存参数组中,您可以进行编辑timeout。它的默认值为0,使空闲连接处于redis状态。如果将其设置为100,它将删除空闲100秒的连接。