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的配置中就可以了。
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,先这样,下一步抽时间详细测试系统。