IISアプリプール、ワーカープロセス、アプリドメイン


88

IISでは、アプリケーションプール、ワーカープロセス、アプリドメインの違いを説明できますか?また、彼らはどのように連携しますか?私はいくつかの記事を読みましたが、それでもまだ少し混乱しています。

  1. IISで作成された各Webサイトはアプリケーションになりますか?
  2. 各アプリケーションは1つのワーカープロセスに関連付けられていますか?
  3. アプリドメインはどこにありますか?

回答:


103

私は他の言葉でそれらを言うようにしてください。

サーバーでは、多くのasp.netサイトを一緒に実行できます。各サイトはアプリドメインです。

それぞれに1つのアプリケーションプールを割り当てる必要があります。多くのアプリケーションドメイン(サイト)は同じアプリケーションプールを持つことができます。同じアプリケーションプールがあり、同じプロセスと同じアカウントの下で実行されるため、プールの設定も同じです。このプールが再起動すると、そのプールの下のすべてのサイトが再起動します。

これで、各プールは1つ以上のワーカープロセスを持つことができます。各ワーカープロセスは、サイトを実行する個別のプログラムであり、静的変数が単独であり、開始停止呼び出しが異なります。異なるワーカープロセスは互いに通信せず、データを交換する唯一の方法は、共通ファイルまたは共通データベースからです。複数のワーカープロセスがあり、そのうちの1つが長時間の計算を行う場合、もう1つがインターネットコールの処理とコンテンツの表示に注意を払うことができます。

1つのプールに多くのワーカープロセスを割り当てると、呼び出されるWebガーデンが作成され、コンピューターが1つの処理マシンである場合、サイトは複数のコンピューターから実行されるようになります。

アプリドメイン、プールとプロセス

各ワーカープロセスは多くのスレッドを持つことができます。

ワーカープロセスの増加による影響:ワーカープロセス
1つの場合、すべての静的変数は同じであり、すべての静的変数は同じであり、を使用しlockてそれらを同期します。複数のワーカープロセス
を割り当てた後も、静的変数に引き続きを使用します。静的変数は、サイトの多くの実行間で、およびいくつかの共通リソース(ディスク上でのサムネイルの作成など)がある場合でも変わりません。次に、ワーカープロセスをと同期する必要があります。lockMutex

もう1つ注意してください。あなたが作るときに、その音より多くのワーカープロセスを、あなたがよりスムーズ非同期ページ・ロードを有することができます。asp.netのセッションハンドラーには、ページ読み込みのプロセス全体をロックするという小さな問題があります。これは、それを知っていて処理するかどうかに依存します。

したがって、1つのサイトについて、多くのワーカープロセスのみについて説明します。ここで、共通のリソース変更をと同期する必要があるという問題に直面しますMutex。しかし、セッションを使用するページ/ハンドラーは、セッションがそれらをロックするため、非同期ではありません。多くのポイントのこの同期を自分自身にすることを避けるので、これは開始に適しています。

このトピックに関するいくつかの質問:
同じセッションを共有している別のWebアプリの処理中にWebアプリがブロックさ
れるWebサービスへのjQuery Ajax呼び出しは同期しているようです
ASP.NETサーバーはページを非同期に処理しない
ASP.Netのセッションを完全に置き換える

これで、このセッションロックは別のサイトには影響しません。

さまざまなサイトの中で、より効果的なプロセスは、実行時間の長いプロセスで、一方のサイトが他方をブロックしないようにするのに役立ちます。
また、さまざまなサイト間では、より多くのプールも役立ちます。各プールには少なくとも1つの機能するプロセスがありますが、プロセスエクスプローラーを使用して自分で覚えて確認すると、各機能プロセスはコンピューターのメモリをより多く消費し、16Gメモリを備えた大きなサーバーを1つ使用しますまた、1つのSQLサーバーがあまりにも多くの異なる作業プロセスを持つことはできません。たとえば、100の共有サイトを持つサーバーでは、100の異なるプールを持つことはできません。


IIS 5での処理方法と、IIS 6以上での処理方法が異なることを理解しています。したがって、IIS 5には1つのワーカープロセスと複数のアプリドメインがあり、IIS 6と比較すると、各アプリケーションプールに1つずつ複数のワーカープロセス(w3wp.exe)があります。IIS6.0では、inetinfoは要求に応じて異なるワーカープロセスにリダイレクトします。私はここにいますか?これが私のソースdotnetslackers.com/articles/iis/…です
Ravi

@ user460103はいiis5には1つのワーカープロセスがあります(複数のアプリドメインは小さなハックでしか作成できませんが、一緒に機能しません。)1つのサイトに多くのワーカープロセスがある場合、はいiis6は別のワーカープロセスにリダイレクトできます。
アリストス

IISはすべてのWebリクエストに対して新しいプロセスを起動しますか?それとも新しいスレッドを起動しますか?
変数

@variable新しいスレッドを起動します-プロセスは常に稼働しているか、プールに設定した方法でリサイクルされます...
Aristos

複数のプロセスがある場合、セッションはどのように機能しますか-セッションはプロセスごとであると思いました
変数

18
  • 1つのIISサーバーに複数のアプリケーションプールがある場合があります。
  • 1つのWebアプリケーションが1つのアプリケーションプールにバインドされます。
  • 1つのアプリケーションプールに複数のワーカープロセスがある場合があります(Web Gardenが有効な場合)。
  • 1つのワーカープロセスが複数のアプリドメインを持つことができます。1つのアプリドメインは1つのワーカープロセスにのみ存在します。
  • 1つのアプリドメインに複数のスレッドがある場合があります。1つのスレッドを異なるアプリドメインで異なる時間に共有できます。

ASP.NET開発者にとっての意味:Webサイトをスケーラブルにするために、インプロセスセッションを使用したり、同期に静的クラス変数ロックを使用したりしないでください。


7
  1. はい。ただし、すべてのアプリケーションがウェブサイトであるとは限りません。あなたは、ネストされているアプリケーション持つことができますのウェブサイトを。

  2. はい、すべてのアプリケーションには1つのワーカープロセス(アプリケーションプール)が必要ですが、1つのアプリケーションプールで複数のアプリケーションを処理できます。単一のWebアプリケーションを分散(Webガーデン/ファーム)して、複数のプロセスで実行することができます。

  3. 各プロセスは独自のアプリドメインで実行されます(すべてのアプリケーションプールは個別のアプリドメインです)。


MSDNから。

Webアプリケーションを作成します

アプリケーションとは、Webサイトのルートレベルにあるコンテンツのグループ、またはWebサイトのルートディレクトリの下の別のフォルダーにあるコンテンツのグループです。

アプリケーションプール

アプリケーションプールは、1つ以上のワーカープロセスのグループを定義し、そのアプリケーションプールに割り当てられている1つ以上のアプリケーションへの要求を処理する共通設定で構成されます。アプリケーションプールを使用すると、一連のWebアプリケーションが1つ以上の同様に構成されたワーカープロセスを共有できるため、一連のWebアプリケーションをサーバーコンピューター上の他のWebアプリケーションから分離する便利な方法を提供します。プロセス境界は各ワーカープロセスを分離します。したがって、1つのアプリケーションプールでのアプリケーションの問題は、他のアプリケーションプールのWebサイトやアプリケーションには影響しません。アプリケーションプールは、Webインフラストラクチャの信頼性と管理性の両方を大幅に向上させます。


そのため、IISプロセスには複数のアプリドメイン(アプリケーションプール)があり、すべてのアプリケーションプールは複数のWebサイトを持つことができます。では、複数のWebサイトが単一のアプリドメインに存在するのでしょうか。1つのWebサイトで問題が発生した場合、アプリドメイン全体とそこにあるすべてのWebサイトがダウンしますか?
ラビ

@ user460103プールをクラッシュさせた場合、プールに接続されているすべてのサイトが停止し、停止してから再起動します。
アリストス

1
2.いいえ。Webガーデンが構成されている場合、アプリケーションは複数のワーカープロセスにまたがることがあります。
Wiktor Zychla

@Wiktor-私はそれを排除しなかった。ただし、明確にするために回答を更新しました。
2012

3

ソースリンクから:-http://weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx

アプリケーションはIIS用語ですが、ASP.NETが利用する用語です。本質的には、サンドボックスまたは一連の境界を作成して、異なるサイトまたはサイトの一部を他のサイトから分離します。

AppDomainは.NETの用語です。(IIS7では、AppDomainsはIIS内でより大きな役割を果たしますが、大部分はASP.NETの用語です)

ワーカープロセスは、Webアプリケーションのリクエストを処理するために使用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.