Web アプリケーションがフリーズするという問題が発生しています。JConsole 監視ツールを使用すると、アプリが maxPoolSize に達していることがわかります。これにより、アプリがフリーズします。
システムには約 20 人のユーザーがいて、各ユーザーは複数の Web セッションを持つことができます。
アプリ内の HttpServlet の例を次に示します。
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
Session sess = null;
Transaction tx = null;
try {
sess = RuntimeContext.getCurrentSession();
tx = sess.beginTransaction();
doingStuffWithSession(req, res, sess);
if (!tx.wasCommitted()) {
tx.commit();
}
} catch (Exception e) {
handleException(e, req, sess);
} finally {
if (sess != null && sess.isOpen() && tx != null && tx.isActive()) {
tx.rollback();
}
}
}
c3p0 の休止状態のプロパティは次のとおりです。
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
<property name="hibernate.archive.autodetection" value="class, hbm"/>
<property name="hibernate.c3p0.min_size" value="20" />
<property name="hibernate.c3p0.max_size" value="200" />
<property name="hibernate.c3p0.timeout" value="300" />
<property name="hibernate.c3p0.max_statements" value="50" />
<property name="hibernate.c3p0.idle_test_period" value="3000" />
</properties>