10

負荷がかかった状態で spring/hibernate/c3p0 アプリケーションを実行しています。c3p0 の maxPoolSize を同時ユーザー数よりもはるかに少ない数に減らすと、アプリケーションがハングアップします。ログにエラー メッセージはありませんが、先に進みません。

アプリケーションの速度が低下することを期待していますが、完全に停止するわけではありません。

c3p0 の設定は次のとおりです。

<bean id="coreDataSource" 
          class="com.mchange.v2.c3p0.ComboPooledDataSource"
          destroy-method="close"
          p:driverClass="${core.jdbc.driver}"
          p:jdbcUrl="${core.jdbc.url}"
          p:user="${core.jdbc.user}"
          p:acquireIncrement="5"        
          p:acquireRetryAttempts="10"
          p:acquireRetryDelay="5000"
          p:initialPoolSize="52"
          p:maxIdleTime="3600"
          p:maxIdleTimeExcessConnections="300"
          p:minPoolSize="52"
          p:maxPoolSize="125"
          p:numHelperThreads="6"
          p:unreturnedConnectionTimeout="0">
          <property name="password">
              <bean class="com.docfinity.util.encryption.SpringStringDecrypter"
                  p:decryptFlag="${core.jdbc.decryptPasswordFlag}"
                  p:encryptedString="${core.jdbc.password}" />
          </property>
    </bean>

160人のユーザーを投げると、これはロックされます。

unreturnedConnectionTimeout をプラス (120 秒) に設定して、アプリケーションに表示されるスタック トレースを調べました。スタック トレースは、アプリケーションのさまざまなメソッドからのものです。接続が漏れていると指摘して言うことができる方法が1つあるわけではありません.

この問題をデバッグするための助けをいただければ幸いです。

4

4 に答える 4

12

HibernateまたはSpringが接続をリークしているのではないかと思います。どこかで構成の問題が発生しているため、アプリケーションで接続が実行されているのではないかと思います。これが私がすることです:

  • 同時ユーザー数とプールサイズを減らしてください。問題が負荷に関連しているのかどうかはわかりません。

  • との組み合わせunreturnedConnectionTimeoutよりも大きい値に設定して、接続がチェックアウトされ、プールに戻されない場所を特定し、生成されたスタックトレースの一部をポストします。0debugUnreturnedConnectionStackTracestrue

  • 問題が発生する1つのビジネスフロー(1つのユースケースシナリオ)を特定し、問題が見つかるまでこのシナリオでテストを実行します。

また、1つまたは2つのスタックトレースで質問を更新します。誰かが明らかな何かを見つけるかもしれません。

于 2010-05-12T07:58:27.817 に答える
2

接続をリークしているのは Hibernate と Spring ではなく、アプリのどこかでリークしています。C3P0 についてはよくわかりませんが、BoneCP ( http://jolbox.com ) は、閉じられていない接続を検出する機能をサポートしています (そして、それらを開いた場所のスタック トレースを提供します) + スレッドが停止すると、リークしている接続をすべて閉じます適切なクリーンアップなし。

于 2010-06-23T10:09:14.877 に答える
0

この投稿では、パラメーターとスタックトレースを使用してc3p0 接続リークの問題をデバッグする方法について説明します。お役に立てれば

于 2012-03-13T22:13:49.303 に答える