0

JSF 2.0 アプリケーションで hibernate 4.2.4 と c3p0 0.9.2.1 を使用しています。すべてが機能していますが、一度に 5 人のユーザーがアプリケーション内でいくつかのアクションを実行すると、数分後にフリーズします。同じコンテナー内の他のアプリケーション (ポートレット) には引き続きアクセスでき、CPU と RAM の使用率は正常です。

おそらく、c3p0 接続プールのすべての接続が使用中で、使用後に解放されていないのでしょうか?! しかし、これが問題であるかどうかを確認するにはどうすればよいですか?

stackoverflow.com の一部のスレッドではunreturnedConnectionTimeout、 andを使用するように指示されています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) を 2 にするのは得策ではありません。「うまくいく」はずですが、大量の同時アクセスがある場合は、多くの待機が予想されます。

再構成構文: もっと似ているだろう...

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

プールの初期化時に構成ダンプ (INFO) を調べて、目的の c3p0 構成が通過することを確認します。

または、JMX を使用して、フリーズ中にプールを調べます。

于 2013-09-24T15:03:06.983 に答える