.NET TIPS [ASP.NET]IIS 6.0でワーカー・プロセスの挙動をカスタマイズするには?山田 祥寛2005/01/07 |
|
|
IISのワーカー・プロセスとは、IIS(Internet Information Services)上において、ユーザー・アプリケーションを実行するためのプロセスである。本稿では、このワーカー・プロセスの挙動をカスタマイズする方法について解説する。
■IIS 6.0の内部アーキテクチャ
まず、IIS 6.0の内部的なアーキテクチャについて簡単に解説しておこう。以下は、IIS 6.0の内部アーキテクチャを図示したものだ。
IIS6.0の内部アーキテクチャ |
IIS 5.xではInetinfo.exe単体で実装されていたコア・モジュールが、IIS 6.0では次の3つのモジュールに分離されている。
- Web管理サービス(WAS)
- ワーカー・プロセス(w3wp.exe)
- HTTPリスナ(Http.sys)
Web管理サービス(WAS)は、ワーカー・プロセスを管理/監視するモジュールである(詳細後述)。
また、HTTPリスナは、クライアントからのリクエストを受け付け、適切なアプリケーションによって処理された結果をクライアントに返答する。このモジュールが、IIS 6.0における玄関口となる。処理待ちのリクエスト・キューを管理したり、応答キャッシュが存在する場合に即座にレスポンスを生成したりするのもHTTPリスナの役割だ。IIS 6.0では、こうしたWebサーバの基本的な動作をカーネル・モードに委ねることで、処理の高速化を実現している。
HTTPリスナを1個のモジュールとして独立させたことは、安定性という観点からも意味がある。IIS 6.0では、ユーザー・アプリケーションをワーカー・プロセスとしてWebサーバ本体(HTTPリスナ)から分離することで、サーバ全体としての安定性が高まっている。万が一、ユーザー・アプリケーション上で回復不能なエラーが発生した場合にも、メモリ空間が独立しているので、その影響がIIS本体にまで及ぶことはない。
のみならず、IIS 6.0ではこのワーカー・プロセスを必要に応じて複数起動できるようになった(ワーカー・プロセス分離モード)。ワーカー・プロセスを複数個起動することで、それぞれのアプリケーションを個別のプロセスとして実行できるため、何かしら予期せぬ障害がアプリケーション上で発生したとしても、ほかのアプリケーションを巻き添えにすることがない。また、より堅牢性が求められるアプリケーションならば、複数のワーカー・プロセスを1つのアプリケーションに割り当てることも可能だ。これによって、障害により1個のプロセスが停止したとしても、残りのプロセスが処理を引き継ぐため、アプリケーション全体が完全に利用不可能になることを防ぐことができる(Webガーデン)。
ワーカー・プロセスの種類 |
■アプリケーション・プールの設定
さて、このようにIIS 6.0では「ワーカー・プロセス分離モード」によって、アプリケーションのより安定した運用が可能になるわけだが、実は、デフォルトの状態ではこの恩恵を享受することはできない。というのも、IIS 6.0のデフォルトの状態では、すべてのアプリケーションを1個のプロセスに割り当てているためだ。もしも特定のアプリケーションが属するプロセスを分離したいならば、新たに「アプリケーション・プール」を設ける必要がある。アプリケーション・プールは、アプリケーションを実行するための分離されたワーカー・プロセスである。
アプリケーション・プールを新規に作成するには、「インターネット・インフォメーション・サービス・マネージャ(以降、IISマネージャ)」の左ツリーから[アプリケーション プール]を右クリックして、表示されるコンテキスト・メニューから[新規作成]−[アプリケーション プール]を選択すればよい。
以下のような[新しいアプリケーション プールの追加]ダイアログが表示されるので、任意の名前(ここでは「MyAppPool」)を入力し、[OK]ボタンをクリックする。これで、IISマネージャの[アプリケーション プール]に新規のアプリケーション・プール「MyAppPool」が追加されたはずだ。
[新しいアプリケーション プールの追加]ダイアログ |
ワーカー・プロセスを分離するには、まず[新しいアプリケーション プールの追加]ダイアログで、アプリケーション・プールを新規に作成する必要がある。 |
ただし、これだけではアプリケーションが属するためのプロセスを用意しただけであるので、次に個別のアプリケーションをアプリケーション・プールに割り当てる必要がある。IISマネージャの[Webサイト]からアプリケーション・プールに割り当てたいアプリケーション(ここでは「aspnet2」)を右クリックして、そこで表示されるコンテキスト・メニューからプロパティを開き、それにより表示される[<アプリケーション>のプロパティ]ダイアログの[仮想ディレクトリ]タブの中にある[アプリケーション プール]の欄から、先ほど作成した[MyAppPool]を選択する。これで、「aspnet2」アプリケーションは独立したアプリケーション・プール「MyAppPool」上で動作するようになった。
[<アプリケーション>のプロパティ]ダイアログ |
アプリケーション単位で所属するアプリケーション・プールを選択できる。デフォルトは、標準で用意されているアプリケーション・プール「DefaultAppPool」だ。 |
■WAS(Web管理サービス)によるワーカー・プロセス設定のカスタマイズ
さて、これでアプリケーションを個別のプロセスで動作させられるようになったわけだが、ワーカー・プロセスを分離することの目的は、必ずしも堅牢性の確保だけではない。
プロセスを分離することで、アプリケーションごとにプロセスの挙動を設定できるという運用面での優位性もある。IIS 6.0ではワーカー・プロセスの挙動を管理するために、WAS(Web管理サービス)を提供している。これを使ってワーカー・プロセスのプロパティ値(管理パラメータ)をカスタマイズすることで、プロセスを破棄するまでのアイドル時間やリフレッシュのスパンなどをきめ細かに決められるので、より効率的なメモリの利用が可能になる。
以下にWASで提供されているワーカー・プロセスのプロパティ値をまとめた。
管理項目 | 概要 | 効果 |
リサイクル | ワーカー・プロセスの状態がある特定の条件を満たしたタイミングでプロセスを再起動(時間(間隔/特定時刻)/要求数/メモリの消費量など) | 障害時のサービスの継続 |
アイドル・タイムアウト | 一定時間以上、アイドル状態にあるプロセスの停止 | 不要なプロセス破棄によるメモリ利用の効率化 |
要求キューの制限 | カーネル内における要求数の制限 | DoS攻撃の抑止 |
CPU使用の管理 | CPU使用率の監視と制限値を超えた場合の処理を指定 | 障害時の影響波及の防止 |
Webガーデン | 最大のワーカー・プロセス数を指定 | パフォーマンスと堅牢性の改善 |
ワーカー・プロセスへのPing | ワーカー・プロセスへのPing間隔の指定 | 異常の早期検出 |
ラピッドフェール保護 | 一定期間内に一定回数以上のプロセス・エラーが発生した場合にプロセスをシャットダウン | 障害時の影響波及の防止 |
WASのプロパティ設定項目 |
これらの管理パラメータを設定するには、以下のようにして、IISマネージャの左ツリーから[アプリケーション プール]−[<アプリケーション・プール名>]を右クリックし、表示されたコンテキスト・メニューから[プロパティ]を選択して行う。
[<アプリケーション・プール名>のプロパティ]ダイアログ |
アプリケーション・プールにかかわるさまざまな設定パラメータを、ここから設定できる。 |
上記の表を参考に、それぞれの管理パラメータの意味を理解し、IISの適切な運用に役立てていただきたい。
カテゴリ:環境設定 処理対象:IIS |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|