いくつかの新しいサーバーに多数のサイトを展開しようとしています。アプリケーションプールについて次の質問があります。
Webサイトごとに1つのアプリケーションプールを用意することをお勧めします。このアプローチには注意点がありますか? 1つのアプリケーションプールですべてのCPU、メモリなどを占有しますか?
アプリケーションプールで複数のワーカープロセスを許可する必要があるのはいつですか?いつすべきではないのですか?
プライベートメモリ制限を使用して、あるアプリケーションプールが別のアプリケーションプールに干渉するのを防ぐことはできますか?設定が低すぎると、有効なリクエストが有効な応答を取得せずにアプリケーションプールをリサイクルすることになりますか?
プライベートメモリ制限と仮想メモリ制限の違いは何ですか?
サイトごとに1つのアプリケーションプールを実行しないという説得力のある理由はありますか?
1)Webサイトごとにアプリケーションプールを用意することをお勧めします。このアプローチには注意点がありますか?たとえば、1つのアプリケーションプールですべてのCPU、メモリなどを占有することはできますか?
これはかなり良いアプローチです。異なる "サイト"(アプリケーション)が同じプールを共有するように考えることができる適切な理由はありません。何らかの単一のリソースを共有する必要がない限り。理論的には、1つのアプリケーションが大量のCPUまたはメモリを占有する可能性がありますが、アプリケーションのプール方法を変更しても、それほど大きな影響はありません。
2)アプリケーションプールで複数のワーカープロセスを許可するタイミング。いつすべきではないのですか?
これは、デフォルト設定を使用して、そのままにしておくのが最善です。あなたが何をしているのか本当にわかっていない限り、これは実際にあなたのウェブサイト/アプリケーションに悪影響を及ぼす可能性があります。
3)プライベートメモリ制限を使用して、あるアプリケーションプールが別のアプリケーションプールに干渉するのを防ぐことができますか?設定が低すぎると、有効なリクエストが有効な応答を取得せずにアプリケーションプールをリサイクルすることになりますか?
a)理論的に
b)はい、これを低く設定すると悪影響が生じる可能性があります。繰り返しますが、特定のニーズがなく、何をしているかを理解していない限り、これらはそのままにしておきます。
4)プライベートメモリ制限と仮想メモリ制限の違いは何ですか?
それは非常に複雑です、ここに私が見つけた簡単な投稿があります: http://cybernetnews.com/cybernotes-windows-memory-usage-explained/
5)サイトごとに1つのアプリケーションプールを実行しないという説得力のある理由はありますか?
繰り返しますが、私が考えることができる唯一の理由は、複数のアプリケーションが必要とする何らかの「共有リソース」がある場合、それらを同じプロセスで実行することです。
汎用アプリケーションとWebサイトの場合、IISはデフォルト値でかなりうまく設定されています。
****更新****
#2に関する追加情報のリクエストに関しては、特に必要がない限り、これを行わないでください。時間がかかるサーバーアクションでも、複数のスレッドを使用してリクエストが処理されるため、「非同期リクエスト」を使用して、長時間実行されているタスクを処理します(他のリクエストを処理するためにスレッドプールスレッドを解放します)。現実的には、1つのプールに複数のプロセスを許可する正当な理由は考えられません。
複数のプロセスの会話を開始すると、次のようなことが発生する可能性があります。セッションはプロセス1で生きているためにセッション状態が失われるが、要求はプロセス2で処理されている。さらに悪いことに、方法を理解する必要があるいくつかのプロセス間通信を行います。これは本当の痛みです。
複数のプロセスの理由に関してあなたが何をもって来ても、私はそれを処理するためのより良い方法があることを望んでいます(別のプロセスを起動するよりも)。
私は常にWebサイト専用のアプリケーションプールを構成します。低コストのWebサイトホスティングシナリオは、アプリケーションプールごとに多数のサイトを持つことが理にかなっています。
メモリ制限は、サイトがすべてのシステムリソースを消費するのを防ぐための、実際の安全上のしきい値にすぎません。これは、Windows 2008 R2 x64の潜在的な問題であるIIS 6.0 x86の場合よりも多いことに注意してください。x86アプリケーションには2 GBのメモリ上限があるためです。IIS 7.5は、メモリリークのあるアプリケーションが大量のメモリを消費するためのものです。
また、アプリケーションプールのリサイクルはあまり好きではありません。アプリケーションプールがあり、実行しているアプリケーションが私だけの場合、コードに何も問題がなければ、おそらくアプリケーションプールをリサイクルする必要はありません。アプリケーションに欠陥がある場合、最終的に適切なアクションはコードを修正することです。