- - PR -
リサイクルと再起動の違いについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-04-08 18:07
はじめまして、
VB.NETで書かれたWEBアプリケーションの お世話をしているものです。 IISのプロセスのメモリ使用量が異常増加して WEBアプリにログインできなくなったため アプリケーションプールのリサイクルを実行したところ プロセスのメモリ使用量が一気に下がり、アクセス可能になりました。 私の調べによるとリサイクルは、 .NETのプロセスをメモリリークや自動解放されずに無秩序状態に陥っている 状態からサービスを再起動せずに不要なメモリを解放してくれるものかと 思っているのですが間違いでしょうか? またリサイクルは、セッション情報が失われるということでWEB画面系のアプリケーションプールに利用時間中に定期的に設定することはできない(=別途DBに情報を保持する等の対応が必要) とのことですが、同じサーバ内で画面系の.NETモジュールから使用しているWEBサービス(アプリ内でセッション情報は使用していない)のアプリケーションプールがリサイクルされた場合はどうなるのでしょうか。 アプリケーションプールのリサイクルとIISのサービスの再起動の違いについて 明確な回答を探してみても得られずにいます。 .NETに詳しい方どうか宜しくお願いいたします。 | ||||
|
投稿日時: 2008-04-08 18:59
Help くらいちゃんと読んだほうがいいですね。
再起動
Recycle という流れになります。 _________________ | ||||
|
投稿日時: 2008-04-10 09:19
ご説明ありがとうございました。
リサイクルを行っても実行中のプロセスの処理が 途中で強制遮断されることはなく、 セッションの終了を待って自動的にプロセスの再起動がかかるとの認識で 間違いありませんでしょうか。 | ||||
|
投稿日時: 2008-04-10 23:08
timeout の時間過ぎると session がなくなります。
_________________ | ||||
|
投稿日時: 2008-04-11 14:05
正確には「セッションの終了を待って自動的にプロセスの再起動」ではないです。
リサイクル中にタスクマネージャなどでプロセス監視するとわかりやすいですが、リサイクルのタイミングでプロセス(w3spだっけ?)がもともと起動していたプロセスとは別に起動します。つまり、リサイクル開始直後はプロセスが2つあがります。クライアントからの新規のリクエストは新しくあがったほうのプロセスで処理して、古い方のプロセスは継続しているリクエストのみ処理して、処理するリクエストがなくなったらプロセスが落ちます。 1. WEBをプロセスAで提供中 2. リサイクル実行 3. プロセスB起動 (プロセスAは実行中) → プロセス2つになる。 4. 新しいリクエストはプロセスBが処理 5. 継続中のリクエストはプロセスAが処理 6. プロセスAが処理するものが無くなったらプロセスA終了 7. プロセスBだけが残る・・・ みたいな感じ。 だから常に要求を受け付けることが出来て、リサイクル中でもクライアントからの要求が受けることができます。 | ||||
|
投稿日時: 2008-04-16 16:22
リサイクル実行時にプロセスが2つ起動しているの
気がつきませんでした。 ということは、システム稼動中にメモリリークなどにより使用メモリが膨れ上がってしまった場合等にIISのサービスの再起動なしで臨時対応でプロセスの使用メモリを落とすことができるということになりますでしょうか。 しかし、セッション変数を使っている場合、リサイクルにより内容のリセットがかかってしまうというのはどうしようもないのでしょうか。 分かりやすいご回答本当にありがとうございました。 | ||||
|
投稿日時: 2008-04-16 17:55
セッション管理をインプロセスでやるのであれば、セッション変数が失われてしまうのはどうしようもないです。 SQL Serverやステートサーバ等、アウトプロセスでやればセッション変数を維持できます。 セッション状態モード http://msdn2.microsoft.com/ja-jp/library/ms178586(VS.80).aspx |
1