hrk1l2x log

be the worst

IIS basic

基本的なことを断片的にまとめておいた。

Environment

  • IIS10.0.1の環境下

HTTP protocol

  • 10.0.1では HTTP/1.1, HTTP/2.0 をサポート。
  • クライアントサイドのprotocolによりよしなに切り替えてくれる。

Application pool

  • IIS Web Application worker processの設定を行う。
  • Worker processはweb applicationが実行されるprocessであり、実体は w3wp.exe
  • 同じworker processを共有するweb application群の意。
  • Worker process (ApplicationPool) を分離することでmemory空間が分かれ、1つのapplicationがcrushしたとしても他applicationを巻き込まずに済む。

Application

  • (くどい言い回しだが) HTTP等のprotocolを経由してclientへサービス提供を行うfile群。
  • IISではapplicationのpathがURIとなる。
  • Applicationがsiteに属するだけではなくApplicationPoolにも属する。

Site

  • Siteはapplication (virtual directoryも) を含み定義したbind設定を通してrequestを処理する。
  • 1つ以上のapplication, またはroot application (後述) を含む必要がある。
  • applicationは1つ以上の仮想ディレクトリを含む必要がある。
  • virtual directoryはマシン上のphysical directoryにマップされる。
    • root virtual directory

Virtual directory

  • IISで各applicationが持つdirectory名 (またはpath)。
  • applicationのphysical directoryにmapする。
  • 1つのapplicationが複数のvirtual directoryを持つことが出来る。
    • 例えばapplicationのphysicla directoryにmapしたくないfileをvirtual directoryを経由してapplicationが利用出来るようにする。
  • 当該directory名はURLの一部となる。
  • virtual direcotyがmapされているphysical directoryとその配下のweb.configの構成をIISが参照する。
    • 参照させたく無い場合はvirtual directoryのattribute allowSubDirConfig をfalseに設定する。

bind

  • bind protocol, bind informationの2属性を定義する。
  • bind protocol
    • server, clientとの通信protocolを指定する。
  • bind information
    • bind information (siteへのアクセス情報)
    • IP Address, port, host header

WAS (Windows process activation service)

  • 任意のprotocolを利用してbindを適用する。
  • application poolベースのprocess起動、障害保護、状態監視、recycle等を提供する。

Root application

iisreset / AppPoolRecycleの違い

iisreset

  • 既存Worker process stop
  • 新規Worker process start

ApplicationPoolRecycle

  • 新規Worker process (w3wp.exe) start
    • 既存のw3wp processとは別に新規で起動する。
    • 新規Sessionはこちらを利用。
  • 既存Sessionすべて終了 / もしくは指定した時間経過後Worker process stop

Config

各種configファイルの役割

  • Machine.config
    • .NET Frameworkシステム全体の構成設定。
    • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config
  • ApplicationHost.config
    • 全Web site, applicationに関係する設定を保存。
    • C:\Windows\System32\inetsrv\config
  • Administration.config
    • IISの管理設定。
    • IIS manager用の管理module他、moduleの利用する構成設定。
    • C:\Windows\System32\inetsrv\config
  • Redirection.config
    • 複数IIS serverの構成を単一ファイルで管理するためのファイル。
    • C:\Windows\System32\inetsrv\config
  • web.config
    • application rootのフォルダに配置することでそのapplicationの.NET構成設定を変更可能。
      • favicon, robots.txt, redirection等の定義。
    • 全体のapplication poolには影響しない
    • Machine.config よりも優先される構成エントリのみを含めることが出来る。
  • その他
    • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config
    • この場所に配置されている web.config はapplicationに影響を与えない。

Trouble shootings

ApplicationPoolのWorker process宛のpingが稀にtimeoutを起こす

# event: 5138
アプリケーションプールに使われているワーカープロセスは、割り当てられた時間にプロトコル 'http' のリスナー チャネルを停止できませんでした。

# event: 5013
アプリケーションプールを提供しているプロセスはシャットダウンの最中に時間制限を超えました。
  • リスナーチャネルを停止 というのはIISがWorker processに対し定期的にpingしてリクエストが返らない場合に、当該processを終了しようとしていることを指す。
    • event_id:5138発生
    • default値は30秒。
  • 終了しようとするが当該processはmemory領域にいる為、停止が失敗する。
    • event_id:5013発生
  • 当該エラー発生時にメモリー使用率が瞬増していたりする為、当該のworker processが何らかの要因でbusy状態になっていた可能性がある。
  • Ping 有効化 の設定値を無効化するか、Pingの応答時間を長くする。

References