欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

db2连接池故障排除记

程序员文章站 2022-06-11 19:44:31
...
用java写了个web项目,用了struts和spring。项目中还用了个连接池,数据库是用的db2.一开始时数据源在spring配置文件中是这样配置的:
   <bean id="myDataSource1"
class="org.apache.commons.dbcp.BasicDataSource">
        <property name="url">
<value>jdbc:db2://localhost:50000/test</value>
</property>
<property name="driverClassName">
<value>com.ibm.db2.jcc.DB2Driver</value>
</property>
<property name="username">
<value>test</value>
</property>
<property name="password">
<value>test</value>
</property>
</bean>


      一开始用到也没有问题,随着用户并发数增加当超过8个时,无法通过配置的数据源获得db2数据库连接放入池中,导致连接池中连接耗尽,无法获得连接,界面无法登录。于是在网上查了下资料,有很多资料显示db2有数据库连接数限制,其中有这样几个参数:numdb、maxapps、maxagents,这几个参数的详细含义大家可以查查,网上已经有很多介绍我就不多讲了。

       用在db2命令行下界面下敲入:db2 get dbm cfg就可以看以上几个参数的值了。其中numdb的值刚好为8,我心里一阵窃喜,我那边刚好是并发用户超过8个就挂了,难道就是这参数在搞怪。而且它的中文显示这个参数的描述是:并发活动数据库的最大数目。于是去咨询公司的dba,dba毫不留情的否认了我的看法,指出numbdb是指并发活动的数据库的数目。后来自己在本机验证了一下,修改了这个参数,依然没法解决这个故障,证明dba所言非虚。


         看来方向错了,于是我用jdbc获得连接放入池中测试了一下,当并发数量超过8个一点问题没有,看来和数据库限制连接数一点关系。用上面数据源测试时超过8个故障就重现。难道apache数据源有问题,于是换了spring的数据源重新测试了一下,故障消失了,该数据源的获得的最大连接数和参数maxapps有关。问题解决了,不过为啥dbcp的数据源到8就不行了还不知原因,用这个要慎重,要不一不小心就中招了。