美文网首页
连接池优化一----网络数据包流程监控三

连接池优化一----网络数据包流程监控三

作者: 白馨_1114 | 来源:发表于2020-04-26 18:14 被阅读0次

    版本:
    jedis版本:3.0.1
    commons-pool2版本:2.6.1

    连接池数据结构:
    LIFO“后进先出”栈方式


    image.png

    FIFO“先进先出”队列方式


    image.png

    连接池中连接状态转换:
    .................................................待补.....................................................

    连接池相关配置:
    Jedis可配置:JedisPoolConfig—继承—>GenericObjectPoolConfig—继承—>BaseObjectPoolConfig
    Jedis不可配置:EvictionConfig、AbandonedConfig

    BaseObjectPoolConfig配置如下:
    protected void toStringAppendFields(final StringBuilder builder) {
    builder.append("lifo=");
    builder.append(lifo);
    builder.append(", fairness=");
    builder.append(fairness);
    builder.append(", maxWaitMillis=");
    builder.append(maxWaitMillis);
    builder.append(", minEvictableIdleTimeMillis=");
    builder.append(minEvictableIdleTimeMillis);
    builder.append(", softMinEvictableIdleTimeMillis=");
    builder.append(softMinEvictableIdleTimeMillis);
    builder.append(", numTestsPerEvictionRun=");
    builder.append(numTestsPerEvictionRun);
    builder.append(", evictionPolicyClassName=");
    builder.append(evictionPolicyClassName);
    builder.append(", testOnCreate=");
    builder.append(testOnCreate);
    builder.append(", testOnBorrow=");
    builder.append(testOnBorrow);
    builder.append(", testOnReturn=");
    builder.append(testOnReturn);
    builder.append(", testWhileIdle=");
    builder.append(testWhileIdle);
    builder.append(", timeBetweenEvictionRunsMillis=");
    builder.append(timeBetweenEvictionRunsMillis);
    builder.append(", blockWhenExhausted=");
    builder.append(blockWhenExhausted);
    builder.append(", jmxEnabled=");
    builder.append(jmxEnabled);
    builder.append(", jmxNamePrefix=");
    builder.append(jmxNamePrefix);
    builder.append(", jmxNameBase=");
    builder.append(jmxNameBase);
    }

    GenericObjectPoolConfig中配置如下:
    protected void toStringAppendFields(final StringBuilder builder) {
    super.toStringAppendFields(builder);
    builder.append(", maxTotal=");
    builder.append(maxTotal);
    builder.append(", maxIdle=");
    builder.append(maxIdle);
    builder.append(", minIdle=");
    builder.append(minIdle);
    }
    BaseObjectPoolConfig中的
    JedisPoolConfig配置如下:

    public class JedisPoolConfig extends GenericObjectPoolConfig {
    public JedisPoolConfig() {
    // defaults to make your life with connection pool easier :)
    setTestWhileIdle(true);
    setMinEvictableIdleTimeMillis(60000);
    setTimeBetweenEvictionRunsMillis(30000);
    setNumTestsPerEvictionRun(-1);
    }
    }

    下面我们将对这些参数分类,详细解释相关含义
    连接池基本参数【BaseObjectPoolConfig】


    屏幕快照 2020-04-26 下午5.45.37.png

    LIFO“后进先出”栈方式 有效地利用了空闲队列里的热点池对象资源,随着流量的下降会使一些池对象长时间未被使用而空闲着,最终它们将被淘汰驱逐;
    而 FIFO“先进先出”队列方式 虽然使空闲队列里所有池对象都能在一段时间里被使用,看起来它好像分散了资源的请求,但其实这不利于资源的释放(因为空闲池对象的空闲时间只有超过5分钟后,才有资格被驱逐检测,分散资源请求的同时,也导致符合释放条件的空闲对象也变少了,而每个空闲对象都占用一个redis连接)。

    链接池数目参数【GenericObjectPoolConfig】


    屏幕快照 2020-04-26 下午5.46.14.png

    链接池超时参数【BaseObjectPoolConfig】


    屏幕快照 2020-04-26 下午5.46.42.png

    连接池test操作【BaseObjectPoolConfig】


    屏幕快照 2020-04-26 下午5.47.08.png

    连接池检测参数【BaseObjectPoolConfig】


    屏幕快照 2020-04-26 下午5.47.37.png

    GenericObjectPool构造函数内还提供了一个配置,就是AbandonedConfig,清理策略,主要保证被借出的链接长时间没有归还导致链接被占用的链接泄漏问题。

    链接池清理参数【AbandonedConfig】

    ---------------------------------待补---------------------------------------


    屏幕快照 2020-04-26 下午5.48.07.png

    异步线程驱除空闲连接设置【EvictionConfig】


    屏幕快照 2020-04-26 下午5.48.31.png

    相关文章

      网友评论

          本文标题:连接池优化一----网络数据包流程监控三

          本文链接:https://www.haomeiwen.com/subject/hcmjwhtx.html