(连接)池参数配置的核心含义

来源:互联网 发布:mac 制作吉他谱的软件 编辑:程序博客网 时间:2024/06/08 19:51

1.池

在很多场景下,一些相对耗时的网络资源都会预先创建好,并放入一个池中进行缓存;比如
数据库连接池、jedis连接池等。在配置池的时候,会涉及到两个必须的参数:maxIdle、maxTotal。
maxIdle指空闲时保持的连接数;maxTotal表示最大可创建的连接数(就是池子最大上限);

2.maxIdle和maxTotal核心含义

池的思路是预创建+缓存,目的是为了在客户端大量急需时,能够保证有“足够”的连接资源可用,只有在不够时,才会触发新创建(不能超过maxTotal)。

对这个里面的大量急需情况分析下原因:
1.从池中拿连接的速度大于放回池的速度,如果未超时,会等;如果等超时,会报错,然后触发新创建;
等超时了,一方面说明了连接资源被长期占用着(这个时候要考虑下服务端的处理能力是不是效率很低),另一方面
说明了这点maxIdle确实不够用,在等池子中可用的连接超时后,会创建新连连接,等结束空闲一段时间后,池中的大小会退回到maxIdle水平;
因此,maxIdle说明了程序启动时真实需要的连接数(这个参数保证不报错情况下需要的连接数),maxTotal表示该客户端最大能创建的连接数(这个参数控制了一个服务端的连接资源不能都分给一个客户端);

3.如何设置maxIdle和maxTotal

maxTotal的设置要参考服务端的可用的资源总数是多少,并且打算把连接分给了几个客户端,进行平分下就可以;
maxIdle的设置就是一个高并发场景下起到“缓冲”作用,该值的设置不能太高(太高,会占着连接,新加入的客户端会无连接可用),也不能太低(太低,会导致高并发时可能报错);
这个时候就需要客户端限流(测试满足需求的场景下,一个客户端到底真的需要几个连接数,没必要不够就创建,创建的时候可能比设置超大等待时间还糟糕) ,
另外,把等池中可用连接的等待时间设置的稍大点(这样从池中拿连接的速度小于放回池的速度)。

总结

maxIdle和maxWaitMillis(等池中可用连接时间)两个参数的意义大于maxTotal,因此多从这两个参数的调整来考虑池的设置;