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

q343959872 2011-11-03 02:39:00
在程序中我的连接池设置大小为
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秒之后也会被回收掉才对啊!针对上面的情况,希望各位大大能给予帮助和建议!

...全文
718 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
话偏锋 2014-05-22
  • 打赏
  • 举报
回复
我也喷到这种问题了,dbcp恶心死了,怎么计算他释放的个数呢?
去旅行吧 2014-04-22
  • 打赏
  • 举报
回复
楼主的问题解决了吗 有可能是资源没有释放的原因 导致连接没有被回收
q343959872 2011-11-03
  • 打赏
  • 举报
回复
不能沉啊...囧
q343959872 2011-11-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zyz1985 的回复:]
什么应用需要开这多的链接,给我的第一感觉就是程序代码没有正确的释放连接,oracle默认的连接数是150个吧
[/Quote]

因为业务需要,这个系统业务并发量在高潮的时候会达到330的并发数,所以需要的连接出会多一些,oracle的process是设为500了,现在的情况是并发量高潮后,数据库进程达到380+,之后业务并发平缓,但是数据库的进程和v$session表中的active连接没有下降太多,跟并发高潮之前平缓阶段的数据库进程数相差很大,之后下个业务并发高潮来到的时候数据连接池的连接会超过最大值,导致获取不到数据库连接!
游一游走一走 2011-11-03
  • 打赏
  • 举报
回复
什么应用需要开这多的链接,给我的第一感觉就是程序代码没有正确的释放连接,oracle默认的连接数是150个吧
chabale 2011-11-03
  • 打赏
  • 举报
回复
虽然不是很懂,我也想了解,帮忙顶起
q343959872 2011-11-03
  • 打赏
  • 举报
回复
别沉啊····
q343959872 2011-11-03
  • 打赏
  • 举报
回复
唉,都没有人来
q343959872 2011-11-03
  • 打赏
  • 举报
回复
求各位大大,帮帮忙啊

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧