Chinaunix首页 | 论坛 | 博客
  • 博客访问: 390190
  • 博文数量: 80
  • 博客积分: 2682
  • 博客等级: 少校
  • 技术积分: 907
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-16 09:55
文章分类

全部博文(80)

文章存档

2012年(80)

分类: 系统运维

2012-06-17 13:31:15

最近接了个紧急的工作,用5天时间做一个网站。

由于时间紧,很多工作来不及做得更细,主体功能一完成就急着上线了。由于没有时间做更多的测试,所以心里不免对网站系统性能有些担心。结果网站上线还不到半天,最担心的事情还是发生了——系统挂了,问题是得不到连接。

后台报的错误是:

Cannot get a connection, pool error Timeout waiting for idle object

Timeout waiting for idle object

 

很显然,连接池溢出了。由于系统已经正式上线了,去查程序哪里连接没有及时关闭可能来不及了,有没有简单一点的方法呢?

 

于是上网查了一下,果然。

就是一句话 removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"

 

把这句话加在Resource的配置中就可以了。

    type="javax.sql.DataSource"
   password="11111111"
   username="sa"
   driverClassName="net.sourceforge.jtds.jdbc.Driver"
   url="jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=web;" maxActive="500" maxIdle="30" maxWait="5000" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"/>

 

这句话的意思是,当连接池中的连接达到最大连接数500时,自动回收闲置60秒还没有正常关闭的连接,并在控制台输出被回收连接的相关信息。

 

是这样的么?先测试一下:

首先把maxActive="500" maxIdle="30" 改小一点,maxActive="10" maxIdle="5"

其次写一个小程序,这个程序获得连接后并不正常关闭。

 

测试结果在预料之中:在占用大概10个连接的时候,控制台输出大量提示信息。信息提示出没有关闭的连接的具体位置,而且测试页面正常显示。

 

OK,先这样,下一步抽时间详细测试系统。

阅读(1393) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~