[Seasar-user:2299] Re: 高負荷時 ConnectionPool が wait 状態になる
kenichi_okazaki
okazaki
2005年 6月 29日 (水) 12:55:11 JST
おかざきです。
すみません。今すぐは、ちゃんと検証できないのですが、
S2SessionFactoryImpl#closeSession()
を次の様に2行コメントアウトして、試していただけませんか?
org.seasar.hibernate.impl.S2SessionFactoryImpl
==============================================================
private void closeSession() {
Transaction tx = getTransaction();
if (tx != null) {
S2Session session = null;
// synchronized (this) {
session = (S2Session) txSessions_.remove(tx);
// }
if (session != null && session.isOpen() ) {
try {
session.clear() ;
} finally {
Connection con = session.close();
ConnectionUtil.close(con);
}
}
}
}
==============================================================
以上 お手数ですが、宜しくお願いいたします。
工藤一樹さんは書きました:
> はじめまして工藤一樹と申します。
>
> 負荷テストを実施した際、ConnectionPoolのところでコネクションが取得できな
> い現象が発生しました。
> 取得できないのでスレッドがそこでwaitします。
>
> テスト環境
> TOMCAT 4.1.30
> S2hibernate 1.0.6
> 使用しているコンポーネントは下記の通りです。
> org.seasar.extension.jta.TransactionManagerImpl
> org.seasar.extension.dbcp.impl.ConnectionPoolImpl
> org.seasar.hibernate.impl.S2SessionFactoryImpl
> org.seasar.extension.dbcp.impl.DataSourceImpl
> org.seasar.extension.dbcp.impl.XADataSourceImpl
>
> TOMCATで指定している最大スレッド数が20、ConnectionPoolの最大プールサイズ
> は10を指定していました。
> [最大スレッド数] > [最大プールサイズ] の時に発生します。
> [最大スレッド数] ≦ [最大プールサイズ]の時には発生しません。
> 後者の設定にすれば回避できるのですが、腑(ふ)に落ちなかった為、調べてみ
> ました。
>
>
> waitしているのはConnectionPoolImpl#checkOut()です。
> コネクションの空きがない時にwaitします。
> waitに対してnotifyしているのがrelease()とcheckIn()です。
> しかしトランザクションのコミット時にチェックインしているメソッドは
> afterCompletion()から呼び出されたcheckInTx()でした。
> このcheckInTx()ではnotifyしていません。
> notifyしていなのでwaitが解除されません。
> checkInTx()をsynchronized化しメソッドの最後でnotify()を呼び出す様に修正
> した所、waitは適切に解除されるようになりました。
>
> なぜcheckInTx()でnotifyしていないのか、修正方法が正しいのかわかりません
> が、waitしてしまうのはよろしくないです。
>
> これは不具合になるのでしょうか?
>
> 以上、よろしくお願い致します。
>
> --
> 工藤一樹 [E-MAIL ADDRESS DELETED]
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> http://lists.sourceforge.jp/mailman/listinfo/seasar-user
Seasar-user メーリングリストの案内