- PR -

リサイクルと再起動の違いについて

1
投稿者投稿内容
まつとうや
常連さん
会議室デビュー日: 2004/09/04
投稿数: 42
投稿日時: 2008-04-08 18:07
はじめまして、
VB.NETで書かれたWEBアプリケーションの
お世話をしているものです。
IISのプロセスのメモリ使用量が異常増加して
WEBアプリにログインできなくなったため
アプリケーションプールのリサイクルを実行したところ
プロセスのメモリ使用量が一気に下がり、アクセス可能になりました。
私の調べによるとリサイクルは、
.NETのプロセスをメモリリークや自動解放されずに無秩序状態に陥っている
状態からサービスを再起動せずに不要なメモリを解放してくれるものかと
思っているのですが間違いでしょうか?

またリサイクルは、セッション情報が失われるということでWEB画面系のアプリケーションプールに利用時間中に定期的に設定することはできない(=別途DBに情報を保持する等の対応が必要)
とのことですが、同じサーバ内で画面系の.NETモジュールから使用しているWEBサービス(アプリ内でセッション情報は使用していない)のアプリケーションプールがリサイクルされた場合はどうなるのでしょうか。

アプリケーションプールのリサイクルとIISのサービスの再起動の違いについて
明確な回答を探してみても得られずにいます。
.NETに詳しい方どうか宜しくお願いいたします。

ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2008-04-08 18:59
Help くらいちゃんと読んだほうがいいですね。


    再起動
  1. 既存 worker process の停止
  2. 新規 worker process の開始



    Recycle
  1. 新規 worker process の開始 (以降新規 session はこちらを利用)
  2. 既存 session すべて終了後、もしくは一定時間経過後 worker process の停止


という流れになります。
_________________
まつとうや
常連さん
会議室デビュー日: 2004/09/04
投稿数: 42
投稿日時: 2008-04-10 09:19
ご説明ありがとうございました。

リサイクルを行っても実行中のプロセスの処理が
途中で強制遮断されることはなく、
セッションの終了を待って自動的にプロセスの再起動がかかるとの認識で
間違いありませんでしょうか。

ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2008-04-10 23:08
timeout の時間過ぎると session がなくなります。
_________________
KYO
会議室デビュー日: 2005/10/31
投稿数: 19
投稿日時: 2008-04-11 14:05
正確には「セッションの終了を待って自動的にプロセスの再起動」ではないです。

リサイクル中にタスクマネージャなどでプロセス監視するとわかりやすいですが、リサイクルのタイミングでプロセス(w3spだっけ?)がもともと起動していたプロセスとは別に起動します。つまり、リサイクル開始直後はプロセスが2つあがります。クライアントからの新規のリクエストは新しくあがったほうのプロセスで処理して、古い方のプロセスは継続しているリクエストのみ処理して、処理するリクエストがなくなったらプロセスが落ちます。

1. WEBをプロセスAで提供中
2. リサイクル実行
3. プロセスB起動 (プロセスAは実行中) → プロセス2つになる。
4. 新しいリクエストはプロセスBが処理
5. 継続中のリクエストはプロセスAが処理
6. プロセスAが処理するものが無くなったらプロセスA終了
7. プロセスBだけが残る・・・

みたいな感じ。
だから常に要求を受け付けることが出来て、リサイクル中でもクライアントからの要求が受けることができます。
まつとうや
常連さん
会議室デビュー日: 2004/09/04
投稿数: 42
投稿日時: 2008-04-16 16:22
リサイクル実行時にプロセスが2つ起動しているの
気がつきませんでした。
ということは、システム稼動中にメモリリークなどにより使用メモリが膨れ上がってしまった場合等にIISのサービスの再起動なしで臨時対応でプロセスの使用メモリを落とすことができるということになりますでしょうか。
しかし、セッション変数を使っている場合、リサイクルにより内容のリセットがかかってしまうというのはどうしようもないのでしょうか。
分かりやすいご回答本当にありがとうございました。


かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2008-04-16 17:55
引用:

まつとうやさんの書き込み (2008-04-16 16:22) より:
しかし、セッション変数を使っている場合、リサイクルにより内容のリセットがかかってしまうというのはどうしようもないのでしょうか。


セッション管理をインプロセスでやるのであれば、セッション変数が失われてしまうのはどうしようもないです。
SQL Serverやステートサーバ等、アウトプロセスでやればセッション変数を維持できます。

セッション状態モード
http://msdn2.microsoft.com/ja-jp/library/ms178586(VS.80).aspx
1

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