おーみんブログ

C#, ASP.NET Core, Unityが大好きです。

IISのアプリケーションプールについて勉強してみた。

はじめに

IISのアプリケーションプールについて業務で扱う機会があったので備忘録としてまとめようと思います。

アプリケーションプールとは

以下の記事の説明がとても分かりやすかったので引用させていただきます。

アプリケーションプール(application pool)とは - IT用語辞典 e-Words

アプリケーションプールとは、米マイクロソフトMicrosoft)社のWebサーバソフトウェア、Internet Information Services(IIS)の機能の一つで、アプリケーションをグループ分けしてそれぞれ独立に実行する仕組み。

要するにIISが直接アプリケーションを動かすのではなく、それぞれ独立に実行する仕組み(プロセス分離)を利用してアプリケーションを動かすことで、そのアプリケーションが落ちた際も影響はそのプロセス内のみに限定される、というイメージです。

アプリケーションを実行するためのプロセスをワーカープロセスといい、IISの場合はw3wp.exeという名前のワーカープロセスが動きます。

アプリケーションプールのID

アプリケーションプールのIDはワーカープロセスへどの権限を持たせるか、というものです。
IDには以下の4つ(カスタムアカウントを入れると5つ以上)があります。

  • ApplicationPoolIdentity
    アプリケーションが作られた際に作られる権限です。実際に利用する際は「"IIS AppPool\" + "アプリケーションプール名" 」で表示されます。 基本的にはそのアプリケーション内でしか利用しないため、権限の幅が小さく、推奨設定となっています。

  • Network Service
    Usersグループのメンバーです。別サーバへのアクセスも可能です。

  • Local Service
    Usersグループのメンバーですが、ローカル内のリソースにしかアクセスができません。

  • Local System
    WebサーバのAdministratorグループのメンバーであり、どのリソースにもアクセスができます。Administratorグループのため、フルコントロール権限を持っています。
    アプリ実行においては基本的にこの権限を利用しないようにしましょう。

アプリケーションのモード

以下の記事が分かりやすかったので引用します。

atmarkit.itmedia.co.jp

完全にはかみ砕けていないのですが、クラシックモードではISAPIの上でASP.NETが動き、統合モードはそこから独立しているとのことです。
まあ、極端に古いアプリケーションでなければ基本的には統合モードでいきましょう!って感じでいいかな?(;´∀`)

Webガーデン

基本的にアプリケーションとワーカープロセスは1:1の関係で設定されますが、サーバースペックに余裕のあるときは1つのアプリケーションプール内に複数のワーカープロセスを用いるWebガーデンという手法を用いることもあります。

※ローカル環境など、メモリをなるべく消費したくない場合は複数のアプリケーションを1つのワーカープロセスで動かす方法を取ったりもします。

Webガーデンについては以下の記事が分かりやすいです。

IIS: Webガーデンによるアプリケーションプールのマルチプロセス化[ASP .NET] - Build Insider

おわりに

以上、IISのアプリケーションプールについての備忘録でした~。