- PR -

Webサービスで処理を続けるとWebサービスがデータを受信しなくなる

1
投稿者投稿内容
tao
会議室デビュー日: 2004/11/30
投稿数: 1
投稿日時: 2004-11-30 19:03
現在、複数台のPCでWebサービスをいつか組み合わせてデータ処理を繰り返しさせるプログラムを作っています。しかし、WebサービスからWebサービスにデータを処理させるために送受信させているうちにWebサービスがデータを一切受け付けなくなり、処理が止まってしまうという現象に悩まされています。この現象を回避する方法をご存知の方おられましたらアドバイス頂けないでしょうか?

環境を以下に示します。
Fedora Core2,Red Hat9
java 2 sdk 1.4.2_06
tomcatとaxisの組み合わせは
axis 1.1 と tomcat 4.1.31
axis 1.2rc2 と tomcat 4.1.31
axis 1.1 と tomcat 5.5.4
axis 1.2rc2 と tomcat 5.5.4
を試しましたがすべてだめでした。

今まで調査したことを以下に示します。
(1)始め、デッドロックを疑いスレッドダンプの解析を行いましたがどこにも
デッドロックはみつけることができませんでした。

(2)netstatで調査したところ、短期間でのアクセスの集中のためTIME WAIT
のソケットの増加がみられました。これと合わせて
http://marc.theaimsgroup.com/
のメーリングリストでもaxisのソケットの取り扱いに関するものがいくつかあったの
でTIME WAITのソケットを増加させないように通信頻度を下げました。
その結果、TIME WAITのソケットの増加はなくなりましたがプログラムが止まってしまう
現象はなおりませんでした。

(3)http://issues.apache.org/bugzilla/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&product=Axis
の"Connections not closed in http client code."というバグが私の問題と類似して
いると考えました。このバグは 2004-06-06の
http://marc.theaimsgroup.com/?l=axis-dev&m=108650171131081&w=2
で解決されたようなのでaxis 1.2rc2なら解決されていると思い、テストしましたが
だめでした。

(4)プログラム全体が止まってしまった後、tcpdumpでaxis(tomcat)で使用しているポート
を調査したところ以下のような結果がでました。
115550:116998(1448) ack 1 win 5840 <nop,nop,timestamp 2054696 2070801> (DF)
. ack 116998 win 31856 <nop,nop,timestamp 2070802 2054696> (DF)
P 116998:118446(1448) ack 1 win 5840 <nop,nop,timestamp 2054696 2070801> (DF)
. 118446:119894(1448) ack 1 win 5840 <nop,nop,timestamp 2054696 2070801> (DF)
. ack 119894 win 31856 <nop,nop,timestamp 2070803 2054696> (DF)
. 119894:121342(1448) ack 1 win 5840 <nop,nop,timestamp 2054696 2070801> (DF)
. 121342:122790(1448) ack 1 win 5840 <nop,nop,timestamp 2054696 2070801> (DF)
. ack 122790 win 31856 <nop,nop,timestamp 2070803 2054696> (DF)
: . 122790:124238(1448) ack 1 win 5840 <nop,nop,timestamp 2054696 2070801> (DF)
: . 124238:125686(1448) ack 1 win 5840 <nop,nop,timestamp 2054696 2070801> (DF)
: . ack 125686 win 31856 <nop,nop,timestamp 2070803 2054696> (DF)
(以下省略)

この結果からPCはデータを受けていますが、tomcat?,axis?がデータを受信できない
状態にあるようです。

(5)データの量が多すぎるのではと考え,処理させるデータ量を少なくしても現象は
改善されませんでした。

(6)(5)と関連してHTTPトランスポート上でのGZIPエンコーディングをしてデータを送受信
するようにしてみましたが問題は改善されませんでした。

(7)timeoutの設定を疑い, timeout(0), timeout(60000)等いろいろ試しましたが効果は
有りませんでした。


さらにこの現象について以下に示します。
(1)一度処理が処理(Webサービス相互の)が停止してしまったかのように見えても
ある程度待つと処理が再開しますがまた止まってしまいます。

(2)私は現在sshでremoteログインしてtomcatの様子を監視しながら開発を行って
いるのですがプログラム全体が止まるまで待つとtomcat,axisのバージョンに
かかわらず、新たにtomcatを動かしているPCにログインしてkill -9しないと
止まらないPCが何台かでます。


以上長々となってしまいましたが、宜しくお願い致します。
techbits
会議室デビュー日: 2005/05/02
投稿数: 8
投稿日時: 2005-05-02 04:22
Sessionは張っていますか?
張っている場合は、管理は確実に行っていますか?
1

スキルアップ/キャリアアップ(JOB@IT)