none
ワーカープロセスのリサイクルについて RRS feed

  • 質問

  • いつもお世話になってます。

    現在、Windows 2003 Server、IIS6、ASP.NET、Oracleの構成で運用しているシステムがあります。

    一定時間ごとにDBのデータを取得して画面表示を更新しているだけの単純な物です。

    画面更新時にセッションを利用しているのですが、ワーカープロセスのリサイクル時間に達すると、セッションがクリアされてセッションの参照エラーとなってしまいます。

    今はデフォルトの1740分でリサイクルされていますが、サーバーが一週間に一度再起動するので、その時間までリサイクル時間を伸ばすか、リサイクルを無効にすることを考えています。

    そこで質問なのですが、リサイクル時間を延ばす、または無効にすることによるデメリットは何かありますでしょうか?

    よろしくお願いします。

    • 移動 Wang Huang 2012年10月1日 15:02 (移動元:Internet Information Services 5.x, 6.0 - 全般)
    2010年4月3日 16:32

回答

すべての返信

  • Webアプリケーションに何らかの問題があり、少しずつメモリーリークを起こす場合などに対応するため、一定の時間毎にリサイクルする指定が用意されているようです。この指定を行なわないデメリットとしては、Webアプリケーションが正常に実行されない状態からの復帰の保証が一つ減ることぐらいだと思います。

    (参考)
    IIS 6.0 でリサイクルを構成する
    http://technet.microsoft.com/ja-jp/library/cc786196(WS.10).aspx

    Recycling by Elapsed Time (IIS 6.0)
    http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/c21ea743-9524-4cd2-8baa-a78b16c715e0.mspx?mfr=true

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク he-po- 2010年4月13日 1:02
    2010年4月4日 3:37
  • 今はデフォルトの1740分でリサイクルされていますが、サーバーが一週間に一度再起動するので、その時間までリサイクル時間を伸ばすか、リサイクルを無効にすることを考えています。

    逆にもっと短い時間でのリサイクルになりますが、毎日決まった時刻にリサイクルを行う、としてはどうでしょう。

    例えば、毎日 2:00 am にリサイクルするなど、運用に影響を与えない毎日決まった時刻にリサイクルするよう、スケジュールする方法もあると思います。

    2010年4月5日 9:46
  • trapemiya様 返信ありがとうございます。

    >この指定を行なわないデメリットとしては、Webアプリケーションが正常に実行されない状態からの復帰の保証が一つ減ることぐらいだと思います。

    例えば、リサイクル時間を100分と設定して、ワーカープロセス起動から50分経過したところでアプリケーションが固まってしまった場合、残り50分の間はアクセスを試みても反応なしというような状態になると考えていますが、合っていますでしょうか?

    さらに質問で申し訳ないのですが、ワーカープロセスのリサイクル時間の考え方ですが以下で合っていますでしょうか?

    リサイクル時間を100分とした場合

    1.AのPCが最初にアクセス→ワーカープロセス起動・リサイクル時間カウントスタート

    2.AのPCが1から20分経過後に再アクセス→リサイクル時間は残り40分(リサイクル時間は再スタートしない)

     

    現在、再現できる環境がないので聞いてばかりで申し訳ないです。

    2010年4月6日 7:58
  • 西脇様 返信ありがとうございます。

    現在のサイトの作りが、エラーが発生した場合は画面の自動更新を停止するようになっているので、

    リサイクル発生→セッションクリア→セッションの参照エラー→自動更新停止

    となった場合、ブラウザの更新をする必要があります。

    人の手が届く場所にあるPCの場合は問題ないのですが、手が届かない場所にあるPCの場合は簡単にブラウザの更新ができないので、短い時間でのリサイクルは避けたいと思っています。

    2010年4月6日 8:13
  • リサイクルが発生してもセッションの情報が消えない(らしい)StateServer モードを使うのはだめですか?

    <configuration>
    <system.web>
    <sessionState mode="xxx" />    ここを InProc から StateServer に変更する。

    (InProc と StateServer で動き変わるので今更変更はできない?) 

    2010年4月7日 14:45
  • 例えば、リサイクル時間を100分と設定して、ワーカープロセス起動から50分経過したところでアプリケーションが固まってしまった場合、残り50分の間はアクセスを試みても反応なしというような状態になると考えていますが、合っていますでしょうか?

    リサイクルを行うトリガーはリサイクル時間だけではありませんので、必ずしもそうなるとは限らないでしょう。

    (参考)
    ワーカー プロセスのリサイクルを使用する状況を判断する
    http://technet.microsoft.com/ja-jp/library/cc781185(WS.10).aspx

    1.AのPCが最初にアクセス→ワーカープロセス起動・リサイクル時間カウントスタート

    2.AのPCが1から20分経過後に再アクセス→リサイクル時間は残り40分(リサイクル時間は再スタートしない)

    私も確信はないのですが、以下の資料から判断して、アプリケーションが動作しなくなってからだと思います。

    IIS 6.0 F1: [アプリケーション プール] - [リサイクル] タブ
    http://technet.microsoft.com/ja-jp/library/cc753667(WS.10).aspx

    (上記に掲載したページの英語版です。こちらの方がわかりやすいでしょう)
    When and How to Use Worker Process Recycling
    http://technet.microsoft.com/ja-jp/library/cc736458(WS.10).aspx


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年4月8日 9:18
  • 0gata様返信ありがとうございます。

    私もStateServerの利用を考えましたが、以下の2点により断念しました。

    ・レジストリの変更が必要(大丈夫だとは思いますが、他のシステムも動いているサーバーのため)

    ・サーバーが1台しかないのでWebサーバー・DBサーバー・Stateサーバーを兼ねることになり、パフォーマンスの低下が心配

    2010年4月9日 5:45
  • アプリケーション ルートの web.config を一か所編集するだけで OK だったと記憶していますが、レジストリ編集必要でした???

    私は ASP.NET のコード書いてるときから本番まで常に StateServer を使う (InProc は使わない) ようにしてるので、パフォーマンスについてはコメントできないです。
    というか大規模システム構築に関わった経験が無いというのが本当のところ :p

     

    2010年4月9日 17:46
  • trapemiya様 返信が遅れすいません。

    テスト環境が整いそうですので、紹介していただいたページを参考にテストをしてみたいと思います。

    ありがとうございました。

    2010年4月13日 0:58
  • 0gata様

    レジストリの変更はこのページに書いてありました。

    http://sonic64.com/2005-12-21.html

    私も色々と修行不足です。今回の経験を次の機会に生かしたいです。

    2010年4月13日 1:02