Commons-pool配置(1) ——资源数控制
Commons-pool配置(2) ——借还参数
适合的MaxTotal
1、业务希望Redis并发量
2、客户端执行时间
3、Redis资源:例如nodes(例如应用个数) * maxTotal 是不能超过Redis的最大连接数。(Config get maxclients)
4、资源开销:例如虽然希望控制空闲连接,但是不希望因为连接池的平凡释放创建连接造成不必要的开销
比较难确定的,举个例子:
- 命令平均执行时间0.1ms = 0.001s
- 业务需要50000QPS
- maxTotal理论值 0.001 * 50000 = 50个。实际值要偏大一些
适合的maxIdle和minIdle
建议maxIdle = maxTotal
- 减少创建新连接的开销
建议预热minIdle
- 减少第一次启动后的新连接开销
常见问题
1、获取连接超时
2、连接池资源耗尽
解决思路
1、慢查询阻塞:池子连接都被hang住。(假如说连接池的maxTotal设置为8,现在有8个线程在执行一个操作,都在执行keys *这个操作,或者由于某些原因Redis的单线程被阻塞了,这8个连接都要对这个操作进行一个等待,在等待期间再去getResource()就会出现 Timeout waiting for idle object的问题。所以说要对每一个操作设置一个超时时间以及maxwaiting的超时时间)
2、资源池参数不合理:例如QPS高、池子小
3、连接泄露(没有close()),此类问题比较难定位,例如client list、netstat等,最重要的是代码
4、DNS异常