当前位置:编程学习 > JAVA >>

求救,DBCP连接池连接释放问题

在程序中我的连接池设置大小为
01服务器程序连接池:初始连接数100,最大连接数200,
 最小空闲数10,最大空闲数50;
02服务器程序连接池:初始连接数100,最大连接数200,
 最小空闲数10,最大空闲数50;

这是其中一台应用服务器程序连接池的配置:

<bean id="dataSource" class="com.ericsson.lsp.util.SecurityBasicDataSource"
destroy-method="close" lazy-init="false">
<property name="driverClassName">
<value>${dataSource.driver}</value>
</property>
<property name="url">
<value>${dataSource.driverUrl}</value> 
</property>
<property name="username">
<value>${dataSource.username}</value>
</property>
<property name="password">
<value>${dataSource.password}</value>
</property>

<property name="maxActive" value="200" />
<property name="maxWait" value="2000" />

<property name="maxIdle" value="50" />
<property name="minIdle" value="10" />
<property name="initialSize" value="100" />

<property name="timeBetweenEvictionRunsMillis" value="10000" />
<property name="minEvictableIdleTimeMillis" value="600000" />
<property name="validationQuery" value="SELECT 1 FROM Dual" />
<property name="removeAbandoned" value="true" />
<property name="removeAbandonedTimeout" value="120" />
<property name="logAbandoned" value="true" />

</bean>


下面是一天业务量和数据库对应的进程数:
时间 数据库进程数 Le业务并发量 Lr业务并发量
10:40 116          [小于10]*2 [小于5]*2
11:00 99          [小于10]*2 [小于6]*2
11:36 139          [4-20]*2           [1-5]*2
12:00 350          [50-110]*2 [20]*2
12:07 320          15*2           15*2
12:21 382          19*2           20*2
12:42 384          30*2          [20-30]*2
12:47 384          [小于20]*2 [小于25]*2
13:00 384          [5-15]*2          [小于15]*2
13:30 384          [30-70]*2          [小于30]*2
14:00 354          [小于10]*2 [15-30]*2
14:20 313          [小于20]*2 [小于30]*2
14:40 383          [小于30]*2 [20-30]*2
15:00 380          [小于10]*2 [小于30]*2

从表格上的流量和数据库进程上来看,当中午12点到达业务并发高峰之后,数据库进程就涨到了350,之后业务并发下降了,但是数据库进程还是有300+,一直没有下降。从数据库方面,当数据库进程涨到382+后,在数据库的v$session中session=’ACTIVE’的数量为377,之后业务下降了,但是数据库的session一直没有释放,连接也没有办法回收。而在这种情况下,当下一次业务并发高潮来到的时候,数据库连接还会继续增加,而达到连接池配置的最大值临界点后,获得不到连接,导致业务请求来临的时候,爆发出数据库错误,致使一部分业务不能正确的定位,直到业务并发高潮过后,才会正常定位,但是数据库连接还是有300+;
下午的时候,把数据库连接进程杀掉了,之后数据库连接变为30个,过一会会涨到90到130左右,跟表格中10:40左右的数据差不多。
不过数据库进程也会自动降下来,到90—130左右,需要的时间比较久,估计是晚上才会降下来。


DBCP连接池的连接数为什么涨上去之后就下降情况不明显,一直维持在很高的地步呢?在业务并发少的时候有几十个连接足够业务正常使用了,而且平缓的时候使用到的连接不会太多,其余的应该会是处于空闲状态,超过了removeAbandonedTimeout  120秒之后也会被回收掉才对啊!针对上面的情况,希望各位大大能给予帮助和建议!

--------------------编程问答-------------------- 求各位大大,帮帮忙啊 --------------------编程问答-------------------- 唉,都没有人来  --------------------编程问答-------------------- 别沉啊···· --------------------编程问答-------------------- 虽然不是很懂,我也想了解,帮忙顶起 --------------------编程问答-------------------- 什么应用需要开这多的链接,给我的第一感觉就是程序代码没有正确的释放连接,oracle默认的连接数是150个吧 --------------------编程问答--------------------
引用 5 楼 zyz1985 的回复:
什么应用需要开这多的链接,给我的第一感觉就是程序代码没有正确的释放连接,oracle默认的连接数是150个吧


因为业务需要,这个系统业务并发量在高潮的时候会达到330的并发数,所以需要的连接出会多一些,oracle的process是设为500了,现在的情况是并发量高潮后,数据库进程达到380+,之后业务并发平缓,但是数据库的进程和v$session表中的active连接没有下降太多,跟并发高潮之前平缓阶段的数据库进程数相差很大,之后下个业务并发高潮来到的时候数据连接池的连接会超过最大值,导致获取不到数据库连接! --------------------编程问答-------------------- 不能沉啊...囧
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,