0

我在 JSF 2.0 应用程序中使用带有 c3p0 0.9.2.1 的休眠 4.2.4。一切正常,但如果 5 个用户同时在应用程序内执行某些操作,它会在几分钟后冻结。同一容器内的其他应用程序(portlet)仍然可以访问,CPU 和 RAM 使用率正常。

也许c3p0连接池的所有连接都在使用中,使用后没有释放?!但是,如果这是问题所在,我该如何检查?

stackoverflow.com 上的一些线程告诉使用unreturnedConnectionTimeoutand debugUnreturnedConnectionStackTraces。我是否必须像下面这样将它放入我的 hibernate.cfg.xml 中?

<property name="com.mchange.v2.c3p0.unreturnedConnectionTimeout">5</property>
<property name="com.mchange.v2.c3p0.debugUnreturnedConnectionStackTraces">true</property>

我的 hibernate.cfg.xml 是:

<property name="current_session_context_class">thread</property>

<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.max_size">2</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">0</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
4

1 回答 1

0

所以,第一件事:maxPoolSize (hibernate.c3p0.max_size) 两个不是一个好主意。它应该“工作”,但如果您有任何重要的并发访问,预计会等待很多。

重新配置语法:它会更像...

<property name="hibernate.c3p0.unreturnedConnectionTimeout">5</property>
<property name="hibernate.c3p0.debugUnreturnedConnectionStackTraces">true</property>

通过检查池初始化时的配置转储(在 INFO 处)来验证您想要通过的 c3p0 配置。

或者,在冻结期间使用 JMX 检查池。

于 2013-09-24T15:03:06.983 回答