[Seasar-user:2303] Re: 高負荷時 ConnectionPool が wait 状態になる

kazukikudo@nifty.ne.jp kazukikudo
2005年 6月 29日 (水) 15:59:59 JST


工藤一樹です。

おかざきさん、お忙しいところ返信ありがとうございます。
S2SessionFactoryImplのsynchronized の箇所をコメントにしてみたのですが
解決しませんでした。やはりwaitで止まっています。

S2Hibernate1.0.6B3 でこの部分を修正されていますよね。デッドロックの不具合で。
今回の不具合はデッドロックではなさそうな気がします。デッドロックならば2つ以上
のスレッドがsynchronizedのところで止まっているはずです。Eclipseのデバッガで確
認しましたが止まっているのはConnectionPoolImpl#checkOut()のwaitメソッドのとこ
ろです。

以上、よろしくお願い致します。

工藤一樹  [E-MAIL ADDRESS DELETED]
>
>おかざきです。
>
>すみません。今すぐは、ちゃんと検証できないのですが、
>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);
>                }
>            }
>        }
>    }




Seasar-user メーリングリストの案内