Tomcat JNDI 连接池溢出

来源:互联网 发布:淘宝买家信誉有什么用 编辑:程序博客网 时间:2024/06/06 00:56

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

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

后台报的错误是:

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

Timeout waiting for idle object

 

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

 

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

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

 

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

 <Resource name="dataSourceJNDI" auth="Container"
   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,先这样,下一步抽时间详细测试系统。

原创粉丝点击