0

我有一个创建jedispool的功能,

    final JedisPoolConfig poolConfig = new JedisPoolConfig();
    poolConfig.setMaxTotal(25);
    poolConfig.setMaxIdle(20);
    poolConfig.setMinIdle(20);
    poolConfig.setTestOnBorrow(false);
    poolConfig.setTestOnCreate(true);
    poolConfig.setTestOnReturn(true);
    poolConfig.setTestWhileIdle(false);
    poolConfig.setMinEvictableIdleTimeMillis(-1);
    poolConfig.setTimeBetweenEvictionRunsMillis(-1); // don't evict
    poolConfig.setNumTestsPerEvictionRun(-1);
    poolConfig.setBlockWhenExhausted(false);
    poolConfig.setLifo(false);
    return poolConfig;

我正在使用下面的池中获取客户端。我看到有时甚至在 100-500 毫秒内,有时在 30 毫秒内也有很高的延迟,以便从池中获取客户端。我正在使用 52 rps 进行测试,配置为 20 个空闲连接和 25 个最大连接。能够处理 ~600rps .. 知道什么会导致延迟吗?如果在池级别有任何调整来验证?

    Instant instant = Instant.now();
    Instant getFromPool = null;
    try (final Jedis jedis = jedisPool.getResource()){
        getFromPool = Instant.now();
    }
4

1 回答 1

0

您可以在池中使用以下方法检查等待线程和最大等待时间。

jedisPool.getNumWaiters();
jedisPool.getMaxBorrowWaitTimeMillis()

但我认为网络层有问题。

于 2020-02-12T08:34:27.000 回答