2011-01-30 24 views
2

私は、IISのライフサイクルについてあまり明確ではないけど、私の一般的な理解がある:時間のあらゆるカップルがリセット自体をIISIISはしばらくすると停止するのはなぜですか?

  1. 。これは明らかに、メモリリーク、リソースデッドロックなどを修正するために行われます。それはクリーンアップ操作のようです。
  2. すべてのカップルより多くの時間は、サーバーだけでインバウンド要求に耳を傾け停止し、Application_Endを実行します(私は23時間を読んだと思います)。外部ページリクエストにより、アプリが再起動されます。

私は、これらの行動が発生した理由をもう少し推論を得ることができますか?特に項目#2に関して...私のサーバは、昨夜完全に亡くなった内部スケジューリング動作を実行します。その理由は、Application_Endが発生し、IISサーバーの再起動を要求していないということです。これは奇妙に思える。ちょうどメモリリークなどをクリーンアップして、そのままIISをそのまま稼働させるのはなぜですか?私が考えることができる唯一の理由は、IISによって使用されているメモリ/ CPUをサーバーが回収できるようにすることですが、スケジューラの問題など、バグの原因ではないと思われます。

+0

すでに良い回答があります。私がまだ不明な点の1つは、IIS7が再起動イベントが発生するとすぐに完全に初期化されない理由です。すなわち、なぜ、サーバーを自動的に稼働させてクライアントのWeb要求を受け取るのではなく、プールを起動するWebページ要求を待つ必要がありますか? –

答えて

0

私はあなたの主な質問にすでに十分に答えていると思いますが、私はあなたの質問の最後の部分に取り組んでいきたいと思います。

メモリリークなどをクリーンアップして、そのままIISをそのまま実行するのはなぜですか?私が考えることができる唯一の理由は、IISによって使用されているメモリ/ CPUをサーバーが回収できるようにすることですが、スケジューラの問題など、バグの原因ではないと思われます。私は、クライアントのWeb要求を受信について自動的に実行しているサーバーを持つとGUNG-HOではなく、その後、私のプールを起動するためのWebページ要求を待機しなければならないのはなぜ

次のシナリオについて考えてみましょう。IISがこのように動作した場合どうなりますか。数千のWebサイト(通常の共有ホスティング環境)をホストしているマシンがある場合、各Webサイトには独自のアプリケーションプール(w3p.exe)が実行されています。そのサイトへのリクエストが行われたかどうかにかかわらず、IISが各Webサイトのワーカープールを起動したとします.2MBのRAMでアイドル状態になると、数千プロセスが一度に起動します。あなたが2000のウェブサイトを持っているならば、あなたは座って4GBのRAMを割り当てただけです。本質的に何もせず、OSは実際の必要性なしにページファイルに食べ始めるかもしれません。

これは望ましいですか?私は答えが「いいえ」であることに同意すると思います。

+0

Tx、それは欠けている部分でした!私自身の専用マシンよりも、共有環境にはもっと意味があります。 –

3

これらの行動は、あなたのウェブサイトのアプリケーションプールのリサイクル設定を変更することにより制御することができます。私たちの生産現場のウェブサイトでは毎晩午前3時にプールをリサイクルしていますが、QA環境は1日に数回リサイクルしています。

5

IIS内の各ウェブサイトは、アプリケーションプールに座っているとあなたがアプリケーションプールが、それは、ワーカープロセスのリサイクル時に影響を与える三つの異なるセクションを持っています。リサイクル、パフォーマンス、健康。プロセスがリサイクルされると、最初に新しい要求を処理するために新しいワーカープロセス(w3p.exe)が作成されます。すべての既存の要求は、それが閉じられる前に古いプロセスで完了します。 Application_StartとApplication_Endは各プロセスで実行されるので、リソースを適切に設定して分解することができます。

Recycling settingsは、ワーカープロセスがリサイクルされる時期に最も直接的な影響を与えます。実行する特定の分数、処理された要求数、または特定の時刻に毎日再起動することができます。特定の時間を使用しているWebファームでは、ファーム内のすべてのサーバーが同時にリサイクルされることはありません。これらをすべて無効にして、ワーカープロセスがリサイクルしないようにすることができますが、質問に記載されているように、サーバーはメモリリークやスレッドのハングアップに対して脆弱になり、IISがアプリケーションプール内のWebサイトに対する要求を処理しなくなります。

Performance settings缶シャットダウン、それは分の指定された数のためか、CPUが指定されたしきい値に達した場合にアイドル状態になった場合、ワーカープロセス。また、アプリケーションプールのワーカープロセス数を増やして、Webガーデンを作成することもできます。

Health settingsワーカープロセスを監視し、繰り返し失敗するとシャットダウンし、指定された時間内に起動と停止を確認します。

2

技術的には、IISが停止またはリセットされていません。これは、IISのモデルがあるなど、Webアプリケーションが実行されるアプリケーションドメインが原因あなたのコード内のバグ/非効率に時間をかけて行き詰まらないことが保証リサイクルされているアプリケーションプール、フレームワークのバグ、

です実際に長時間実行しているアプリケーションの健全性には非常に適しています。例えば、Windowsサービスは、これらの利点を得られません。プロセスがクラッシュした場合は、終了します。しかし、IISは応答時間、メモリ消費、非アクティブなどのようなWebアプリケーションのさまざまな側面を測定できるため、特定の状況下でアプリケーションをリセットすることができます。それらはすべて設定可能ですが、1つのリクエストが前のリクエストに依存しないような方法でWebアプリケーションを開発するよう常に努力すべきです。

また、Webアプリケーションで発生しているWeb要求に直接反応しないものに依存しないでください。だからバックグラウンドスレッドを起動してバックグラウンドタスクを実行する場合は、別のプロセス(Windowsサービスやスケジュールタスクなど)に移動することをお勧めします。 IIS 7 Application Warm-Up Moduleは、Webアプリケーションを定期的にpingして起動します。

インプロセスセッション状態を使用しており、リセットによって問題が発生している場合は、SQLベースのセッション状態プロバイダを使用することを検討してください。

ここでは、IIS 7アプリケーションプールのリサイクル動作を構成する方法について詳しく説明しています。 http://technet.microsoft.com/en-us/library/cc753179(WS.10).aspx

関連する問題