2012-08-02 62 views
-1

我使用Spring 3.0.5.RELEASE和Postgres 9.1。 我限制了17的最大連接數:Spring + c3p0 + postgres

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
    <property name="driverClass" value="${database.driver}" /> 
    <property name="jdbcUrl" value="${database.url}" /> 
    <property name="user" value="${database.username}" /> 
    <property name="password" value="${database.password}" /> 
    <property name="initialPoolSize" value="3" /> 
    <property name="minPoolSize" value="1" /> 
    <property name="maxPoolSize" value="17" /> 
</bean> 

當我的應用程序獲取佔據所有的連接,它只是掛起,不取消或接受更多的交易。 Postgres中的所有進程都處於「閒置交易」狀態。

謝謝!

+1

你還沒有給我們太多的工作。 「空閒事務」應該是一個非常短暫的狀態 - 當一個連接在該狀態下長達一段時間時,它通常表示應用程序代碼中的一個非常嚴重的錯誤,這是您沒有向我們顯示的東西。 – kgrittn 2012-08-02 20:20:15

回答

1

您描述的症狀與您的應用程序的泄漏連接一致。也就是說,您的應用程序正在檢出連接,但未能檢查它們(即,未能調用close()]。

您是否一直在使用強大的資源清理方法?參見例如

http://old.nabble.com/Re:-My-connections-are-all-idle...-p27691635.html

如該鏈接的建議,嘗試暫時設置的unreturnedConnectionTimeout和使用
debugUnreturnedConnectionStackTraces追查泄漏。見

http://www.mchange.com/projects/c3p0/index.html#unreturnedConnectionTimeout

http://www.mchange.com/projects/c3p0/index.html#debugUnreturnedConnectionStackTraces

我希望這有助於!

2

「閒置在交易中」意味着您開始了一筆交易,但從未提交或回滾。確保你在完成使用它們時關閉所有的陳述。如果它沒有什麼明顯的語句,你是抱着開放,修改postgresql.conf文件來記錄您的查詢的進程ID具有以下設置:

log_line_prefix = '%p' 
log_statement = 'all' 

當你重裝PostgreSQL和檢查日誌文件,你會能夠看到掛起在「處於空閒狀態」狀態的連接發出的所有查詢。

相關問題