论坛首页 入门技术论坛

项目运行一段时间后,cannot open connection

浏览 11665 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-05-10  
我的一个项目用的框架是spring1.2+hibernate3.1+struts1.2,应用服务器是webshpere,但是没有用websphere的连接池,用的是apache的dbcp。

在测试机上内部运行测试一段时间后,会报cannot open connection 错误,经分析,应该是并发连接数量不够用的缘故,觉得可能是apache的dbcp有问题,明天准备用websphere的连接池更换再试试。

但疑惑的是,我对数据库操作,都是通过spring 的hibernateTemplate来操作的,hibernateTemplate封装了对链接的关闭操作,事务用的是声明式事务,如果事务配置正确,则会在执行完事务后关闭链接;如果事务配置不正确,则会在执行完数据库操作之后关闭链接,更不存在事务问题,怎么会出现链接不够用的情况呢???如果是dbcp的问题,那使用spring+hibernate是否就不能用tomcat做应用服务器呢,因为tomcat的连接池用的就是dbcp啊??

不知道哪位朋友遇到过这种问题并解决了这种问题,因为我在网上找到的都只是有人提出了这个问题,但是没有人能给出个解决方案,希望不吝赐教。

由于是测试机,所以在项目出现cannot open connection 错误,用户几分钟不做任何操作后,又可以重新操作,说明是连接池在达到了maxWait之后收回了connection,用户再操作时能够重新分配到connection,说明cannot open connection 错误的确是链接数量达到了连接池的maxActive所导致。

不知道有哪位朋友可以赐教这个问题,非常感谢
   发表时间:2007-05-10  
能把具体的错误信息贴出来吗?

试试用webshpere来配置数据源。
0 请登录后投票
   发表时间:2007-05-10  
以我的经验,应当是连接池的配置问题。可以将你的连接配置拿出来看一下。
0 请登录后投票
   发表时间:2007-05-11  
没关闭连接?关闭事务?
0 请登录后投票
   发表时间:2007-05-11  
数据源的配置如下
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>com.ibm.db2.jcc.DB2Driver</value>

</property>

<property name="url">
    <value>*****</value>
</property>
<property name="username">
<value>****</value>
</property>
<property name="password">
<value>****</value>
</property>
<property name="initialSize">
<value>5</value>
</property>
<property name="maxIdle">
<value>2</value>
</property>
<property name="minIdle">
<value>1</value>
</property>
<property name="maxActive">
<value>5</value>
</property>
<property name="removeAbandoned">
<value>true</value>
</property>
<property name="removeAbandonedTimeout">
<value>1800</value>
</property>
<property name="maxWait">
<value>2000</value>
</property>
</bean>
0 请登录后投票
   发表时间:2007-05-11  
“<property name="maxIdle">
<value>2</value>
</property>

<property name="maxActive">
<value>5</value>
”是不是数量太少?加大点试试?
0 请登录后投票
   发表时间:2007-05-11  
肯定是连接池最大连接数太小了。
0 请登录后投票
   发表时间:2007-05-11  
连接池最大连接数太小,且每次取得连接的数量也太少了。这不适合于企业级的应用。
0 请登录后投票
   发表时间:2007-05-11  
真是太有人才了,虽然尚未验证正确与否,但是觉得大家说得很有道理。顺便学习一下这几个连接池的参数
maxActive="100"  <!--最大活跃连接数,这里取值为100,表示同时最多有100个数据库连接。设为0表示无限制。-->

  maxIdle="30" <!--最大的空闲连接数,这里取值为30,表示即使没有数据库连接时依然可以保持30个空闲的连接,而不被清除,随时处于待命状态。设为0表示无限制。-->

  maxWait="10000" <!--最大建立连接等待时间。如果超过此时间将接到异常。这里设置为10000,表示10秒后超时。设为-1表示无限制,直到超时为止。-->

   如果最大数据库活跃连接数过大,可想而知,内存占用量是非常惊人的!如果空闲连接数过大,则资源利用率低,连接池长期未释放,可导致连接池结点异常。所以选好maxActive和maxIdle是连接池性能的关键因素,当然这取决于服务器环境。

0 请登录后投票
   发表时间:2007-05-11  
以前用dbcp 出现过类似的问题, 感觉Connection没有释放. 后来用C3P0问题解决
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics