- PR -

Webサービス呼び出しで「503: Service Unavailable」エラー発生

投稿者投稿内容
Hoppy
常連さん
会議室デビュー日: 2005/05/30
投稿数: 29
投稿日時: 2006-04-21 13:43
お世話になっております。

以下の環境で、クライアントPCのWinアプリ(VB.NET)からWebサーバの
Webサービス(ASP.NET)を呼び出す処理を行っております。
WebサービスではDBよりデータを取得し、取得したデータを元に
処理を行い、結果をクライアントへ返す処理を行っています。

 クライアントPC環境
  WindowsXP Pro SP2
  .NET Framework 1.1 SP1

 Webサーバ環境
  WindowsServer2003 StdEd SP1(IIS 6.0)
  .NET Framework 1.1 SP1

 DBサーバ環境
  WindowsServer2003 EntEd SP1
  SQLServer2000 EntEd SP4


クライアントPCよりWebサービスの呼び出しを行うと、
「503: Service Unavailable」の例外エラーが発生してしまいます。
このエラーはWebサービス側で発生しているわけではなく、クライアント側で
発生しているようです。
(クライアント側ではエラーとなってもWebサービスは継続して処理を続けています。)

但し、毎回エラーが発生するわけではなく、エラーが発生せずに正常に結果が
返ってくることもあります。
エラーが発生するパターンとしては複数のクライアント(複数といっても2、3台ですが)
が同時にWebサーバへ要求を行っている時はほぼ間違いなくエラーが発生します。
該当処理は結果が返ってくるまで長いときで7〜8分かかる時があり(平均3〜4分)、
エラーが発生するのは呼び出し直後ではなく、呼出し後7分ぐらいしてからとなります。
Webサービス呼び出しにおいてあまり現実的ではない処理時間ですが、現状はこのままで
進めるしかなく、Webサーバの設定で何とか改善できないものかと調査しています。


「.NET アプリケーション パフォーマンスのチューニング」
を参考にmachine.configの内容を変えてみたのですが、変化はありませんでした。

 変更した内容(何れも既定値となっていたのを変更しました)
  ・maxconnectionを12に設定
  ・maxIoThreadsを100に設定
  ・maxWorkerThreadsを100に設定
  ・minFreeThreadsを88に設定
  ・minLocalRequestFreeThreadsを76に設定
  ・executionTiomeoutを600に設定
  ・responseDeadlockIntervalを00:15:00に設定
  ・maxRequestLengthを10240に設定

要求の数がappRequestQueueLimitを超えると同様のエラーが発生するようですが、
パフォーマンスモニタで「ASP.NET Applications\\Requests In Application Queue」
を監視してみたところ、まったくカウントされなかった(キューが溜まっていない)
ため、RequestQueueLimitやappRequestQueueLimitの値は既定値のままとしてあります。

ご存知の方おりましたらご教授願います。
よろしくお願いいたします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-04-21 18:10
引用:

Hoppyさんの書き込み (2006-04-21 13:43) より:

該当処理は結果が返ってくるまで長いときで7〜8分かかる時があり(平均3〜4分)、
エラーが発生するのは呼び出し直後ではなく、呼出し後7分ぐらいしてからとなります。


サーバのリソースってどのぐらい使っていますか?
メモリやCPUの利用率など
Hoppy
常連さん
会議室デビュー日: 2005/05/30
投稿数: 29
投稿日時: 2006-04-24 09:38
かるあ様返信ありがとうございます。

該当処理実行中の使用リソースは以下のようになっています。
(数値はサーバのタスクマネージャ上で計測しました)

 メモリ:約50MB
 CPU:40〜50%(平均約45%)
     (HT対応のため、1CPUあたりの使用率は80〜100%(平均約90%)
     ぐらいでしょうか)

Webサーバのスペックは
 メモリ:1GB
 CPU:HT Pen4 3.2GHz
となっています。

よろしくお願いいたします。
想馬
大ベテラン
会議室デビュー日: 2003/05/29
投稿数: 245
お住まい・勤務地: 神奈川・東京
投稿日時: 2006-04-24 10:16
WebサーバにWindows Server 2003 Standard Editionを使っているようですがメモリは最低でも128MBと書いてありますよ。50MBじゃ足りないと思います。

http://www.microsoft.com/japan/windowsserver2003/evaluation/sysreqs/default.mspx

[ メッセージ編集済み 編集者: 想馬 編集日時 2006-04-24 10:17 ]
Hoppy
常連さん
会議室デビュー日: 2005/05/30
投稿数: 29
投稿日時: 2006-04-24 10:27
失礼しました。

使用メモリの50MBというのは該当処理にて使用しているメモリで、
処理実行中の利用可能な空メモリは580MBとなります。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-04-24 11:08
#たくさん書いたのですがパスワードを入れ忘れたばっかりに、「メンバーIDとパスワードを入力してください」で消えてしまいました。

・sleep するだけの Web サービスを新規に作って、同様の症状になるかを見られてはどうでしょうか。
・「503: Service Unavailable」のエラーコードが、サーバー側で出ているのかクライアント側で作り出されているいるのかを確認されてはどうでしょうか。Exception の catch やそのスタックとレースの表示ができるデバッグ体制はできていますか?

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
Hoppy
常連さん
会議室デビュー日: 2005/05/30
投稿数: 29
投稿日時: 2006-04-24 12:03
引用:

・sleep するだけの Web サービスを新規に作って、同様の症状になるかを見られてはどうでしょうか。



後ほど確認しまして結果を報告させていただきます。

引用:

・「503: Service Unavailable」のエラーコードが、サーバー側で出ているのかクライアント側で作り出されているいるのかを確認されてはどうでしょうか。Exception の catch やそのスタックとレースの表示ができるデバッグ体制はできていますか?



先にも記述しましたが、このエラーはクライアント側で発生しているようです。
どのように確認したかというと、
Webサービス側にて例外が発生した場合はクライアント側へThrowているため、
サーバ側でエラーが発生していればクライアント側でCatchした例外
は「SorpException」になるかと思います。
しかし、クライアント側でCatchした例外は「WebException」となっていました。

例外(WebException)をCatchした際のスタックトレースは下記内容となっています。
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
Hoppy
常連さん
会議室デビュー日: 2005/05/30
投稿数: 29
投稿日時: 2006-04-24 16:00
引用:

引用:

・sleep するだけの Web サービスを新規に作って、同様の症状になるかを見られてはどうでしょうか。



後ほど確認しまして結果を報告させていただきます。




10分間SleepするだけのWebサービスを作成し、それを呼び出すクライアントを
5台同時に実行してみましたが、特にエラーは発生せず正常に終了しました。
単純に応答が返ってくるのが遅いためにエラーが発生するという訳ではなさそうです。

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