クリスマスプレゼント もとい IIS

![時之栖.jpg](https://qiita-image-store.s3.amazonaws.com/0/10506/b689c0c4-624b-c76d-c978-62f920609129.jpeg)
[静岡県御殿場市 時之栖](http://www.tokinosumika.com/)


#♡今日はクリスマス・イブ
とうとうこの日がやって参りました、クリスマス・イブ！
イエスの誕生日25日よりもイブにプレゼント交換や小洒落たレストランでディナーを食べたりと、
クリスマスを楽しむ方々が多いのではないでしょうか。

![CWMCSXTUYAAG8Fm.jpg](https://qiita-image-store.s3.amazonaws.com/0/10506/5c3e4bc2-d039-085a-9d73-7db01f092477.jpeg)
[5時から9時まで](http://www.fujitv.co.jp/5ji9ji/index.html)

先日、
数多くの惜しむ声の中、最終回を迎えたフジテレビ 月9ドラマ「5時から9時まで」でもラスト、高嶺(山ピー)が桜庭(石原さとみ)にクリスマスツリーの前でプロポーズをしています。

ちなみに、わたしが一番好きなクリスマスソングは、竹内まりやさんの「すてきなホリデイ」です。
「クーリスマスが今年もやってくるー♪」の歌詞と共に、ケンタッキーフライドチキンのCM曲としてもお馴染み。
![３無題__large.png](https://qiita-image-store.s3.amazonaws.com/0/10506/460a9a60-4780-a61f-3766-893af950f494.png)


#♡そんな聖なる夜にふと思ったこと
恒例行事として当たり前のように準備をしているクリスマスプレゼント、
そもそもクリスマスには、どうしてプレゼントをするのでしょうか？

###調べてみると…
誰もがキリストにプレゼントするには
困っている人に**「優しく」**したり**「親切」**にする事で
キリストにもしている事になると言われ
その事からクリスマスプレゼントをする習慣が始まったそうです。

#さて本題
クリスマスプレゼントをあげる意味のように、
当たり前になっているけど、実際よくわからないまま使っていたもの、

**IIS の「アプリケーションプール」**

について、過去に勉強したことをご紹介しようと思います。

アジェンダ
1. **アプリケーションプールの実態**
2. **アプリケーションプールの設定**
3. **プロセスIDとは**
4. **リサイクルについて**
5. **アプリケーションへの紐付け**

#アプリケーションプールの実態
###IIS の設定画面
![アプリケーションプールの実態.png](https://qiita-image-store.s3.amazonaws.com/0/10506/eb1ddcee-f720-e4a9-2e59-4ba49dd93e7d.png)



+ アプリケーションプールとは、Webアプリケーションを動かす**「プロセス」の設定**のこと

+ Webアプリケーションが実行されると、アプリケーションプールの設定に基づいた「プロセス」が起動され、そのうえでアプリケーションが実行される


###Webサーバのタスク マネージャ
![image](https://qiita-image-store.s3.amazonaws.com/0/10506/e62f172f-54a2-c66e-8f8b-9147695584fa.png)


+ プロセスは、タスクマネージャの「プロセス」タブからも見ることができる

+ プロセスの名前は**「W3WP.EXE」**と決まっている

+ ウェブサイトへ初めてリクエストが来たタイミングでプロセスが生まれる

#アプリケーションプールの設定
###新規で追加
![アプリケーションプールの追加.png](https://qiita-image-store.s3.amazonaws.com/0/10506/ff1f28e4-f787-5972-7923-1f1d9a33f1ed.png)



　　　　　　　**↓↓**

![image](https://qiita-image-store.s3.amazonaws.com/0/10506/613d87f3-40e7-dfde-6a0a-b1190543c734.png)


**名前**

- プールにつける任意の名前
- わかりやすいといい

**\.NET FrameWork バージョン**

- 「2.0」か「4.0」を選択
- 動かすアプリケーションに合わせて選択


**マネージパイプラインモード**

- 「統合」か「クラシック」を選択 
- 基本的に「統合」
- 「クラシック」は IIS6 以前と同じ動作をさせるための設定


###作ったプールをWebサイトに紐付ける
![image](https://qiita-image-store.s3.amazonaws.com/0/10506/5d70ff39-4468-9e6e-350d-bba8d7150045.png)

* アプリケーションプールをWebサイト、Webアプリケーションへ関連付ける

* Webアプリケーションごとに設定できる

* 複数のWebアプリケーションで同じプールを使うことも可能

アプリケーションごとにプールを作る
![image](https://qiita-image-store.s3.amazonaws.com/0/10506/5f47aedb-c730-ba73-dbe2-29dd861e6e67.png)

または

アプリケーション間でプールを共有する
![image](https://qiita-image-store.s3.amazonaws.com/0/10506/8b4318d8-3416-fb6c-c33b-ea953c64053e.png)

+ プールを分けるかどうか

+ 分ける必要があるとき
     → .NETのバージョンが違う
     → マネージパイプラインモードを変えたい

+ メリット、デメリットは後ほど改めて紹介します

#プロセスIDの存在を知る
###詳細設定画面
![image](https://qiita-image-store.s3.amazonaws.com/0/10506/ca83a316-3315-20c0-d25b-d60ed00995a5.png)

+ プロセスIDとは、詳細設定画面から設定できるWebアプリケーションの**実行ユーザ**

+ Webアプリケーションはこのユーザの権限で実行される
例:サーバ上のファイルにアクセスする権限

※デフォルトでは、ApplicationPoolIdentity というビルトインアカウント
※Windowsのユーザやドメインユーザを指定することもできる

![image](https://qiita-image-store.s3.amazonaws.com/0/10506/2d0ce55d-31ee-b4e3-1f7a-a096b311ba94.png) ビルトインアカウントから選ぶ

または

![image](https://qiita-image-store.s3.amazonaws.com/0/10506/67ab43a1-11e0-861f-5024-9658f84d071b.png)カスタムアカウントを指定する

+ 実際に実行ユーザが変わっていることを確かめる
①プロセスIDに LocalService を指定する
②適当なWebサイトに①のプールを割り付ける
③Webサイトを起動し、アクセスする
④Webサーバ上でタスクマネージャを開く

+ プロセスIDに LocalService を指定すると、タスクマネージャから見える実行ユーザが LocalService に変わっている

+ Windowsのユーザやドメインユーザを指定すれば、実行ユーザもそのユーザになる

###DefaultAppPool という名前のプールのIDとしてApplicationPoolIdentity を指定した場合
![image](https://qiita-image-store.s3.amazonaws.com/0/10506/d247c632-3799-d5aa-9b03-47a711098880.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/10506/d47821e1-3803-6405-2ccd-997f4be2748c.png)

+ ApplicationPoolIdnetity を指定した場合の実行ユーザは
　　IIS AppPool\[アプリケーションプール名]  となる

+ このユーザはIISによって自動的に作られる

#リサイクルについて
![リサイクル.png](https://qiita-image-store.s3.amazonaws.com/0/10506/496a3b6b-1035-24e1-638d-afb91c03d6aa.png)


+ リサイクルとは
プロセスをリセットして、メモリを解放すること

+ アプリケーションプール単位で実行できる

+ 詳細設定から、いろいろな条件で自動的に実行できる

###リサイクル実行時のプロセスの動き
![image](https://qiita-image-store.s3.amazonaws.com/0/10506/2e3ec5d6-e660-cb5f-092e-76abd447cb6d.png)

+ 流れ
①新しいプロセスが開始
②以降のリクエストは新しいプロセスで行う
③古いプロセスは今の処理がすべて終わったら終了

+ ポイント
古いプロセスの処理がいきなり中断されることはない
メモリ上の情報はリセットされる
C#で持っているstaticなフィールドがリセットされる
セッションが[^1]InProcモードのとき、リセットされる

[^1]:InProcモード･･･Webサーバのメモリ上にセッションデータを保持

###リサイクル結果をタスクマネージャで確認する
![image](https://qiita-image-store.s3.amazonaws.com/0/10506/b4629bfc-e2ab-6bfb-cc11-2ef928e04b81.png)
通常時

![image](https://qiita-image-store.s3.amazonaws.com/0/10506/1c8d58e8-12ec-8d32-b65b-16f6f34310cd.png)
リサイクルした瞬間

+ タスクマネージャからも、リサイクルの瞬間にプロセスが増えていることが確認できる
+ 自動リサイクルの設定
自動リサイクルの条件を細かく設定可能
そのサーバの環境や、動作させるアプリケーションに合わせた設定が必要

※初期設定は 「1740分(29時間)ごとに再起動」という中途半端な設定になっている

#アプリケーションへの紐付け
アプリケーションごとにプールを作る
![image](https://qiita-image-store.s3.amazonaws.com/0/10506/5f47aedb-c730-ba73-dbe2-29dd861e6e67.png)

または

アプリケーション間でプールを共有する
![image](https://qiita-image-store.s3.amazonaws.com/0/10506/8b4318d8-3416-fb6c-c33b-ea953c64053e.png)

プールを分ける必要があるとき
 
+ .NETのバージョンが違う
+ マネージパイプラインモードを変えたい
+ **異なるプロセスIDを設定したい**

分けることによるメリットデメリット

+ メリット
安定性の向上（別プロセスのアプリケーションがクラッシュしても巻き込まれない）
セキュリティの向上（別プロセスの情報にはアクセスできない）
Webサイトのリサイクルや入れ替えを個別に行える

+ デメリット
メモリ使用量がわずかに増える

#まとめ？
今回の記事は、前職で若手が主体となって行った IIS勉強会の資料を元に作成しました。

普段、手順書任せで手順だけわかっていて、実際何をしているのか、
わかっていないことがたくさんあると思います。

今後も、こういった機会で少しずつアウトプットしていきたいと思います。

#おまけ①
クリスマスプレゼントに縁のない方へ
過去に読んだ 小林正観さんの本『釈迦の教えは「感謝」だった』の引用をご紹介します。
>　英語で過去はPast（パスト）、未来はFuture（フューチャー）、現在はPresent（プレゼント）

>　プレゼントは神様からの贈り物。

>　いま目が見えること、

>　耳が聞こえること、

>　食べられること、

>　話せること、

>　歩けること

>　そういうことの一つひとつ、いま自分が一身に受け浴びているものが、
>　実は全部、神様からの、宇宙からすでにいただいているプレゼントです。

#おまけ②

クリスマス・イブに隕石が地球に衝突する可能性があるようです。
お気をつけ下さい。

【リア充終了】クリスマスイブに巨大な小惑星が衝突する！？地震！噴火！もはや世界が震撼するイベントに
http://www.yukawanet.com/archives/4982617.html

![d42fe587.jpg](https://qiita-image-store.s3.amazonaws.com/0/10506/63d81cb5-ac25-d968-81a0-2ad61a947b0c.jpeg)

###**それではステキなクリスマス・イブをお過ごしください !**
###**I wish you a merry Christmas !**