`

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

阅读更多
我的一个项目用的框架是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所导致。

不知道有哪位朋友可以赐教这个问题,非常感谢
分享到:
评论
15 楼 Qieqie 2007-05-13  
引用
有一新手拷贝别人代码时没拷finally的内容。。。我吐血啊吐血。。。


呵呵 框架好用吧 至少JdbcTemplate还是能够避免问题,看看没有这些模板方法的日子里,世界是多么糟糕阿
14 楼 抛出异常的爱 2007-05-13  
julyboxer 写道
抛出异常的爱 写道
我以前 一项目就是找不到哪里的数据库连接没断开,加了8G内存了事。。。。


你这确实是高手了。。。
让你两天时间内找到问题后上线。。。。你给我一个好办法?

救火队中的奇怪方法多了去了
PS:还是找到没关连接的代码了
有一新手拷贝别人代码时没拷finally的内容。。。我吐血啊吐血。。。
13 楼 julyboxer 2007-05-12  
抛出异常的爱 写道
我以前 一项目就是找不到哪里的数据库连接没断开,加了8G内存了事。。。。


你这确实是高手了。。。
12 楼 xly_971223 2007-05-12  
抛出异常的爱 写道
我以前 一项目就是找不到哪里的数据库连接没断开,加了8G内存了事。。。。

太有才了
11 楼 jameswei 2007-05-12  
估计是连接池数量大小的问题吧.
10 楼 抛出异常的爱 2007-05-11  
我以前 一项目就是找不到哪里的数据库连接没断开,加了8G内存了事。。。。
9 楼 hpq852 2007-05-11  
以前用dbcp 出现过类似的问题, 感觉Connection没有释放. 后来用C3P0问题解决
8 楼 guanfish 2007-05-11  
真是太有人才了,虽然尚未验证正确与否,但是觉得大家说得很有道理。顺便学习一下这几个连接池的参数
maxActive="100"  <!--最大活跃连接数,这里取值为100,表示同时最多有100个数据库连接。设为0表示无限制。-->

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

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

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

7 楼 jimmy.shine 2007-05-11  
连接池最大连接数太小,且每次取得连接的数量也太少了。这不适合于企业级的应用。
6 楼 林秋枫 2007-05-11  
肯定是连接池最大连接数太小了。
5 楼 hgq0011 2007-05-11  
“<property name="maxIdle">
<value>2</value>
</property>

<property name="maxActive">
<value>5</value>
”是不是数量太少?加大点试试?
4 楼 guanfish 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>
3 楼 抛出异常的爱 2007-05-11  
没关闭连接?关闭事务?
2 楼 jimmy.shine 2007-05-10  
以我的经验,应当是连接池的配置问题。可以将你的连接配置拿出来看一下。
1 楼 hgq0011 2007-05-10  
能把具体的错误信息贴出来吗?

试试用webshpere来配置数据源。

相关推荐

    vs2008下配置安装Directshow的详细教程

    `定义了一个静态变量,用于记录最后一次刷新的时间。 - **BaseClasses\winutil.cpp**中的`UINT Count; for(Count=0; Count; Count++){}`是一个循环结构,用于迭代执行某段代码。 - **BaseClasses\outputq.cpp**中的`...

    Linux程序设计入门

    printf("Cannot open mouse connection\n"); exit(1); } while (1) { FD_ZERO(&readset); FD_SET(gpm_fd, &readset); select(gpm_fd + 1, &readset, 0, 0, 0); if (FD_ISSET(gpm_fd, &readset)) { if ...

    Excel数据导出到Access数据库

    Access数据库则需创建相应的表结构来接收Excel数据,表字段应与Excel列对应。 2. **创建Access数据库**: 打开Access,点击“新建”创建一个新的数据库。在空白数据库中,可以通过“表设计”视图手动定义字段,也...

    外文翻译 stus MVC

    The Web brought some unique challenges to software developers, most notably the stateless connection between the client and the server. This stateless behavior made it difficult for the model to ...

    代码规范原则与事例,很详尽的文本

    connection.Open(); // Database operations } ``` ##### 7.3 对象使用 - **对象生命周期**:明确对象的生命周期,合理管理对象的创建和销毁。 示例: ```csharp public void UseObject() { using (var obj = ...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意...

    Oracle数据库使用sqlplus时的连接错误与方向键乱码解决

    如果你收到`sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory`,这意味着系统找不到必要的库文件。这通常是权限或路径问题。你可以通过...

    oracle错误代码大全

    #### ORA-00023: Failed to open the shared memory segment - **解释**: 无法打开共享内存段。 - **解决方案**: 检查操作系统级别的问题,例如权限、空间不足等。 #### ORA-00024: Object is in invalid state -...

Global site tag (gtag.js) - Google Analytics