数据源配置

fmdb1.maxActive = 20 连接池最大活动连接数
fmdb1.maxIdle = 10 连接池最大空闲连接数
fmdb1.minIdle = 0 连接池最小空闲连接数,所有连接都空闲可能全部回收掉
fmdb1.timeBetweenEvictionRunsMillis = 1800000 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. 如果设置为非正数,则不运行空闲连接回收器线程
fmdb1.numTestsPerEvictionRun = 3 在每次空闲连接回收器线程(如果有)运行时检查的连接数量
fmdb1.minEvictableIdleTimeMillis = 1800000 连接在池中保持空闲而不被空闲连接回收器线程(如果有)回收的最小时间值,单位毫秒

连接池默认回收的空闲连接最小时间,1800000毫秒,即30分钟。连接池回收空闲连接与下次回收间隔30分钟,每次检查3个连接。


数据库DBCP连接池配置

背景: 应用在开发访问数据库访问层代码时,因为对Java连接池参数配置不理解,存在漏配或错配,甚至不配等情况,具体表现为挂死,偶尔失败等可靠性问题,严重影响服务的可用性。

重点以Mysql/Gauss/Jedis为例分类说明,特别是仅超时涉及多个参数,要注意他们的区别。

1) jdbc的url超时参数

db.mysql.connectionProperties = connectTimeout=10000;socketTimeout=10000

a) jdbc获取连接的超时,不同数据库有区别:

connectTimeout为Mysql,单位为毫秒,而Gauss为loginTimeout,单位为秒

b) jdbc和服务端通信的网络超时:socketTimeout单位Mysql/Redis为毫秒,Gauss为秒。

应用根据最耗时的SQL操作要多少时间估算,如果设置太短会导致服务端执行成功了,但是客户端认为超时出现不一致,而如果设置太长网络异常会长时间挂住。

 

2) 连接数相关参数

db.maxActive = 40 //最大连接数

db.maxIdle = 20 //最大空闲连接数,性能要求高可以配大点,但不能超过maxActive

db.minIdle = 0 //最小空闲连接数

db.maxWait = 5000 //连接获取不到最大超时毫秒数

db.testOnBorrow = true //重要:从连接池把连接返回给应用前,进行有效性检测,让应用尽量拿到可用连接,避免偶发访问失效。

db.testOnReturn = true

3) 空闲连接清理参数

背景:为保护服务端资源,一般都会配置Mysql的my.cnf参数wait_timeout(MYSQL如果不设置,默认的是8小时),如配置3600,一个小时服务端就会主动断开空闲连接。

db.testWhileIdle = true

db.timeBetweenEvictionRunsMillis = 180000 //含义是每隔多少秒去检查空闲连接

db.numTestsPerEvictionRun = 40 //设定在进行后台对象清理时,每次检查几个连接

db.minEvictableIdleTimeMillis = 180000 //空闲逐出连接池的时间

说明: timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis的总和应小于数据库服务端设置的超时空闲失效时间。

4) 连接泄露规避参数

db.removeAbandoned = true //解决连接池泄露问题

db.logAbandoned = true //连接池收回空闲的活动连接时是否打印消息

db.removeAbandonedTimeout = 30 //如果连接超过多少秒还没放回连接池,认为该连接已被泄漏,连接池主动进行清理。

 

5) Jedis连接池参数配置

redis.maxActive = 8 //同上

redis.maxIdle = 4 //同上

redis.minIdle = 0 //同上

redis.maxWait = 5000 //连接池获取连接超时

redis.socketTimeout = 5000 //重要:网络连接超时

redis.testOnBorrow = true

redis.testOnReturn = false

附件有UserService服务的DBCP连接参数作为参考。

posted on 2018-01-27 14:35  yaoyu  阅读(302)  评论(0编辑  收藏  举报

导航