マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

同時実行性を向上させるためのパラメタについて纏める。

サマリすると以下の様になる。

  • IIS 6 以前、IIS 7 以降のクラシック・モード
    machine.configに設定を行う。
  • IIS 7 以降のクラシック・モード+.NET 4 以前
    MaxConcurrentRequestsPerCPU レジストリに設定を行う。
  • IIS 7 以降の統合モード
    • .NET 3.5 以前
      MaxConcurrentRequestsPerCPU レジストリに設定を行う。
  • .NET 3.5 SP1以降
    aspnet.configに設定を行う。

machine.config

IIS 6 以前、IIS 7 以降のクラシック・モードではmachine.configで以下の設定を使用できる。

IIS 6 以前、IIS 7 以降のクラシック・モード + .NET 2.0

.NET 2.0では自動構成のプロセス モデルを導入したため、
殆どの用途で、KB821268に推奨される変更は不要とされている。

IIS 6 以前、IIS 7 以降のクラシック・モード + .NET 1.1

状況に応じて Machine.config ファイル内の以下のパラメーターを調整する。

  • maxWorkerThreads?
  • minWorkerThreads?
  • maxIoThreads?
  • minFreeThreads?
  • minLocalRequestFreeThreads?
  • maxconnection
  • executionTimeout

ファイルの場所

  • 32ビットの場合:
    %windir%\Microsoft.NET\Framework\[.NETバージョン]\CONFIG\machine.config
  • 64ビットの場合:
    %windir%\Microsoft.NET\Framework64\[.NETバージョン]\CONFIG\machine.config

設定方法

  • maxWorkerThreads?、minWorkerThreads?、maxIoThreads?
    ワーカ・スレッド、I/O スレッドの最大数を制限する。
    <processModel maxWorkerThreads="20" minWorkerThreads="10" maxIoThreads="20">
  • 注:実際のスレッド数は、上記値に論理CPU数が掛けられたもの。
  • 注:IIS 7.0 以降のバージョンの統合モードで実行されている場合は機能しない。
  • minFreeThreads? および minLocalRequestFreeThreads?
    維持するフリー スレッドの最小数を制御する。
    <httpRuntime minFreeThreads="8" minLocalRequestFreeThreads="8">
  • minFreeThreads?
    スレッド プール内で維持するフリー スレッドの最小数。
    必要な数のスレッドが使用できない場合、要求はキューに置かれたままとなる。
  • minLocalRequestFreeThreads?
    新しいローカル要求を実行するために維持するフリー スレッドの最小数。

注:IIS 7.0 以降のバージョンの統合モードで実行されている場合は機能しない。

  • The maxconnection
    特定の IP アドレスに対して確立できる接続の数を設定する。
    <connectionManagement>
      <add address="*" maxconnection="2">
      <add address="65.53.32.230" maxconnection="12">
    </connectionManagement>
  • executionTimeout
    要求の実行時間を制限する。
    <httpRuntime executionTimeout="90"/>

推奨設定

  • 各パラメタの推奨設定値
    N:物理 CPU の数ではなく、論理 CPU の数
  • maxWorkerThreads?、maxIoThreads?
    値を 100 に設定(既定値は 20)
  • minWorkerThreads?
    値を 50 に設定(既定では存在しないため追加が必要、既定値は 1)
  • minLocalRequestFreeThreads?
    76*N に設定(既定値は 4)
  • minFreeThreads?
    値を 88*N に設定(既定値は 8)
  • maxconnection
    値を 12*N に設定(既定値は ?)
構成設定規定値 (.NET 1.1)推奨値
maxIoThreads?20100
maxWorkerThreads?20100
minFreeThreads?888*N
minLocalRequestFreeThreads?476*N
maxconnection212*N
  • 設定例
    CPU×4でハイパー スレッディングが有効になっている場合(N=8)。
<system.web>
  <processModel maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50"/>
  <httpRuntime minFreeThreads="704" minLocalRequestFreeThreads="608"/>
</system.web>
<system.net>
  <connectionManagement>
    <add address="[ProvideIPHere]" maxconnection="96"/>
  </connectionManagement>
</system.net>

MaxConcurrentRequestsPerCPU レジストリ

IIS 7 以降のクラシック・モード+.NET 4 以前

MaxConcurrentRequestsPerCPU 設定(下記のレジストリ設定)を使用してください。

IIS 7 以降の統合モード+.NET 3.5 以前

IIS 7 以降の統合モード+.NET 3.5 以前では以下のレジストリ設定を使用できる。

変更点

統合モードでは、ASP.NET スレッド設定を使用して要求の同時実行性を制御できない。

  • processModel 構成セクションの
    • maxWorkerThreads? 設定
  • system.web/httpRuntime 構成セクションの
    • minFreeThreads? と minLocalRequestFreeThreads? 設定、

は、ASP.NET で使用されるスレッド メカニズムを制御しなくなりました。

設定方法

その代わり、ASP.NET は IIS スレッド プールに依存し、

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\2.0.50727.0 キー内の
    • MaxConcurrentRequestsPerCPU の DWORD 値 (既定値は 12)

を設定することで、同時実行要求の最大数を制御できるようになりました。

この設定はグローバルなので、

  • アプリケーション プールや
  • アプリケーションごとに

変更することはできません。

aspnet.config

IIS 7 以降の統合モード+.NET 3.5 SP1 以降

IIS 7 以降の統合モード+.NET 3.5 SP1 以降ではaspnet.configで以下の設定を使用できる。
※ Manual上は、.NET 4 以降になっているが、実際は.NET 3.5 SP1から採用されている。

ASP.NET アプリケーションが
IIS 7.0 以降のバージョンの統合モードで実行されている場合に、
プロセス全体の動作を管理するために ASP.NET で使用される構成設定を指定します。

  • IIS 6 を実行する場合や、
  • IIS 7.0 をクラシック モード
  • または ISAPI モードで実行する場合は、

これらの設定は無視されます。

ファイルの場所

  • 32ビットの場合:
    %windir%\Microsoft.NET\Framework\[.NETバージョン]\aspnet.config
  • 64ビットの場合:
    %windir%\Microsoft.NET\Framework64\[.NETバージョン]\aspnet.config

設定方法

  • applicationPool要素の属性
    • maxConcurrentRequestsPerCPU
      • ASP.NET で許可する CPU あたりの同時要求数を指定する。
      • .NET 4 での既定の設定は "5000"
  • maxConcurrentThreadsPerCPU
    • 各 CPU のアプリケーション プールで実行できるスレッド数を指定する。
    • 既定の設定 0 は、CPU あたりの作成可能なスレッド数を制限しない。
    • ただし、作成可能なスレッド数には、CLRのスレッド プールによる制限も適用される。
  • requestQueueLimit?
    • ASP.NET のキューに配置できる要求の最大数を指定する。
    • 複数の ASP.NET アプリケーションを 1 つのアプリケーション プールでホストする場合、
      そのアプリケーション プールに対する要求の累積数を制限するために使用する。
    • .NET 4 での既定の設定は "5000"

設定例

既定値

<configuration>
  <system.web>
    <applicationPool 
      maxConcurrentRequestsPerCPU="5000" 
      maxConcurrentThreadsPerCPU="0" 
      requestQueueLimit="5000" />
  </system.web>
</configuration>

applicationHost.config

ApplicationHost?.configにも、Machine.configと同様にprocessModelタグがあるが、
Machine.configのprocessModelタグとは異なり、同時実行制御に関する設定は存在しない。

  • applicationPoolのリサイクリングなどの設定ができる。
  • 同時実行制御に関する設定(maxWorkerThreads?等)は存在しない。

ファイルの場所

%windir%?system32?inetsrv?config\ApplcationHost?.config

設定可能な値

applicationPoolのリサイクリングなどの設定ができる。

<applicationPools>
  <add name="DefaultAppPool" autoStart="true" />
  <add name="Classic .NET AppPool" managedPipelineMode="Classic" />
  <add name="MyAppPool" autoStart="true" managedPipelineMode="Integrated" />
  <applicationPoolDefaults>
    <processModel identityType="ApplicationPoolIdentity" />
  </applicationPoolDefaults>
</applicationPools>

補足

補足1 (統合モード)

統合モードでは ASP.NET アプリケーション キューが使用されないので、

パフォーマンス カウンター:"ASP.NET Applications\Requests in Application Queue"

の値が常に 0 になる

補足2 (IIS 7)

IIS 7 は web.config ファイルのASP.NET 変更通知設定に関係なく、
web.config ファイルを監視し、これが変更されると、
常に ASP.NET アプリケーションを再起動するため、

system.web/httpRuntime 構成セクションの

  • waitChangeNotification?
  • maxWaitChangeNotification?

属性の効果がない。

参考

IIS config

Windows 自動パラメタとチューニング


Tags: :.NET開発, :ASP.NET


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-14 (火) 13:01:46 (3d)