DBCP参数配置


大家好:

连接池参数我们一直未做优化,最近DBA反应在数据库端发现idle连接过多,影响正常连接。经过仔细研究、实践,我们得出一套较合理的连接池(DBCP)的配置参数,给大家分享一下。希望其它各PO按此参数调整线上TOMCAT的DBCP参数。

热数据源: maxActive="10" maxIdle="3" minIdle="2" maxWait="15000" timeBetweenEvictionRunsMillis="60000" minEvictableIdleTimeMillis="180000"

冷数据源:maxActive="5" maxIdle="2" minIdle="1" maxWait="15000" timeBetweenEvictionRunsMillis="60000" minEvictableIdleTimeMillis="180000"

冷热数据源可以这么分:前台访问均为热,后台管理端均为冷。当然,如果你某台机器Worker较多,数据库访问频繁,可以适当加大maxActive和maxIdle值,但是不建议加大minIdle值。还有个参数叫:initialSize。这个参数在server.xml中配置就要出错,但是在context.xml中配置就正常使用(tomcat 6)。如果你的连接池配置在context.xml中,建议把initialSize参数加上,配置成和minIdle一样。

这么配置后,还有个好处就是:有些防火墙会杀掉不动的连接,上面参数可以避免(MYSQL也会杀掉长期不活动的连接)。避免程序取出死连接,导致执行sql时出错。

也许上面的参数并不是最优的,但是在POP这边全面推广后,并没有发现什么大问题。以下是基本情况截图:


这个图表示目前只有一个在使用中,另外2个是空闲。一个空闲时间为956ms,另外一个空闲8160ms。

大部分的时候,Active为0,Idle为3。当然,我们刷新的时候,也许连接池中大部分连接已经被使用过并返还了。根据观察,在热数据源情况下,连接Idle时间基本上没有超过20S。

上图是冷数据源,连接总共才1个,实际上我们配置的maxIdle为2个。所以参数设置的还是挺合理的。这里还要注意一下。DBCP并不是tomcat一启动就立即初始化连接,他是在第一次使用的时候初始化。所以,你完全可以在tomcat中配置多个数据源,而不必担心没有使用到就会连接数据库而导致浪费。


贴一个系统生产环境配置.


<Resource driverClassName="com.mysql.jdbc.Driver"
type="javax.sql.DataSource" 
initialSize="2" maxActive="10" maxIdle="3" minIdle="2" maxWait="15000" 
testOnBorrow="true" testOnReturn="true" testWhileIdle="true"
removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
timeBetweenEvictionRunsMillis="60000" minEvictableIdleTimeMillis="180000"
validationQuery="SELECT 1"
name="mysqljdbc/XX" 
url="jdbc:mysql://192.168.1.1:3306/XX?characterEncoding=utf-8"
password=""
username=" " /> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值