[Seasar-user:18742] Re: [S2Axis2]SAStrutsのAcitonから呼び出した際にソケットクローズされない

秋山 俊郎 [E-MAIL ADDRESS DELETED]
2009年 10月 23日 (金) 12:04:54 JST


秋山です。

問題は解決できました。
axis2の問題のようでしたのでaxis2に手をいれました。

Koichi Kobayashi さんは書きました:
> 「大量に」というのが気になるのですが,
> [Seasar-user:18619] に対する回答のように 
> Connector を prototype にしていたりしますか?

instance属性は特にいじっていませんのでdefaultのsingletonです。

> commons-httpclient がソケットをプーリング
> しているのであれば,通常そのソケットは
> 再利用され,CLOSE_WAIT が大量になることは
> ないのでは?
> CLOSE_WAIT が残ることより,それが大量であることが
> 問題のように思われます.

サーバ側が先にコネクションをきると(通常サーバのキープアライブはどんなに
長くても数十秒だと思います。サーバのコネクションを食いつぶしてしまいます
ので)
そのソケットは再利用できませんので、クライアントは新たにソケットを
作成します。axis2内ではコネクションクローズを行っていません
ので、クライアント側に再利用できないソケットが残ることになります。

この問題はaxis2内のcommons-httpclientの誤った使い方に端を発しているよう
です。

MultiThreadedHttpConnectionManagerと
HttpConnectionManagerのcloseIdleConnections
を使わないといけないようです。

(参考)
http://www.nabble.com/tcp-connections-left-with-CLOSE_WAIT-td13757202.html
http://thejavamonkey.blogspot.com/2009/05/axis-2-clients-socket-exception-too.html

ですのでaxis2内で手を入れて逃げました。

axis2 1.5.1で対応したようです。
http://osdir.com/ml/axis-dev-ws.apache.org/2009-08/msg00012.html

s2axis2のバージョンアップをしていただけるととてもうれしいです。
http://d.hatena.ne.jp/szk-takanori/20090617/p1

以上です。







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