2010-10-10 50 views
2

我們最近更改爲我們的服務器上的CMS垃圾收集器(XX:+UseConcMarkSweepGC),它在測試中正常工作。當我們去到生產,事情最初的幾個小時內確定,但後來我們突然開始看到可怕的:當使用CMS GC時,Tomcat 6連接池變得古怪

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, 
pool error Timeout waiting for idle object 

我們已經看到這些消息時,該數據庫是物理狀態爲關閉或重倉,但這WASN這次是這個案子。所以我開始想知道最近的GC變化可能是罪魁禍首。

我不明白的是爲什麼我們之前沒有見過這個。將GC更改爲併發標記掃描會改變某些事情(可能是終結器),從而暴露出此配置的問題?

context.xml PARAMS是這個樣子:

<Resource name="jdbc/DB" auth="Container" type="javax.sql.DataSource" 
      maxActive="64" maxIdle="60" maxWait="10000" 
      defaultAutoCommit="false" 

我讀this link和開始懷疑這是難以置信的天真參數。根據我的理解,超過60個連接,我們將開始打開和關閉連接,而不會將它們返回到池中。但是我不知道這個和我們的GC變化之間是否有聯繫。

我們使用Tomcat 6.0.29和MySQL 5.1.45(5.1.12 JDBC連接器)。

回答