我正在使用Spring 3.0.5.RELEASE和Postgres 9.1。 我限制了17中的最大连接数:
<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中的所有进程都处于“在事务中空闲”状态。
谢谢!
答案 0 :(得分:2)
“在事务中空闲”意味着您启动了一个事务但从未提交或将其回滚。确保在使用完毕后关闭所有语句。如果您打开的语句不明显,请修改postgresql.conf文件,使用以下设置记录查询的进程ID:
log_line_prefix = '%p'
log_statement = 'all'
当您重新加载PostgreSQL并检查日志文件时,您将能够看到挂起在“处于事务中的空闲”状态的连接所发出的所有查询。
答案 1 :(得分:1)
您描述的症状与应用程序泄漏的连接一致。也就是说,您的应用程序正在检查Connections,但未能检入它们[即,未能调用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
我希望这有帮助!