- 追加された行はこの色です。
- 削除された行はこの色です。
Open棟梁Project - マイクロソフト系技術情報 Wiki
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-戻る
--[[ASP.NET]]
--[[IIS config]]
--[[.NET config]]
* 目次 [#r25ad339]
#contents
*概要 [#zd5746e8]
同時実行性を向上させるためのパラメタについて纏める。
サマリすると以下の様になる。
-IIS 6 以前、IIS 7 以降のクラシック・モード~
machine.configに設定を行う。
-IIS 7 以降のクラシック・モード+.NET 4 以前~
MaxConcurrentRequestsPerCPU レジストリに設定を行う。
-IIS 7 以降の統合モード
--.NET 3.5 以前~
MaxConcurrentRequestsPerCPU レジストリに設定を行う。
--.NET 3.5 SP1以降~
aspnet.configに設定を行う。
--.NET 3.5 以前~
レジストリに設定を行う。
以下に、Windowsのチューニングの基本的な考え方と纏めておく。
-[[Windows 自動パラメタとチューニング]]
*設定箇所 [#ja63d2b4]
**machine.config [#p4535954]
*machine.config [#p4535954]
IIS 6 以前、IIS 7 以降のクラシック・モードではmachine.configで以下の設定を使用できる。
-processModel 要素 (ASP.NET 設定スキーマ)~
http://msdn.microsoft.com/ja-jp/library/7w2sway1.aspx
-ASP.NET アプリケーションから Web サービス要求を行うと、~
競合、パフォーマンスの低下、およびデッドロックが発生する~
http://support.microsoft.com/kb/821268/ja
>状況に応じて Machine.config ファイル内の以下のパラメーターを調整する。
**IIS 6 以前、IIS 7 以降のクラシック・モード + .NET 2.0 [#z558162d]
.NET 2.0では自動構成のプロセス モデルを導入したため、~
殆どの用途で、KB821268に推奨される変更は不要とされている。
--maxWorkerThreads
--minWorkerThreads
--maxIoThreads
--minFreeThreads
--minLocalRequestFreeThreads
--maxconnection
--executionTimeout
-ただし、.NET 2.0では自動構成のプロセス モデルを導入したため、~
殆どの用途で、KB821268に推奨される変更は不要とされている。
--ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0~
-ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0~
- Thomas Marquardt's Blog - Site Home - MSDN Blogs~
http://blogs.msdn.com/b/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx
**IIS 6 以前、IIS 7 以降のクラシック・モード + .NET 1.1 [#kf8e86cf]
状況に応じて [[machine.config>#p4535954]]ファイル内の以下のパラメーターを調整する。
-maxWorkerThreads
-minWorkerThreads
-maxIoThreads
-minFreeThreads
-minLocalRequestFreeThreads
-maxconnection
-executionTimeout
***ファイルの場所 [#u97c0158]
-32ビットの場合:~
%windir%\Microsoft.NET\Framework\[.NETバージョン]\CONFIG\machine.config
-64ビットの場合:~
%windir%\Microsoft.NET\Framework64\[.NETバージョン]\CONFIG\machine.config
***設定方法 [#s25f3b0d]
-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"/>
***推奨設定 [#v6891e1d]
-各パラメタの推奨設定値~
N:物理 CPU の数ではなく、論理 CPU の数
--maxWorkerThreads、maxIoThreads~
値を 100 に設定(既定値は 20)
--minWorkerThreads~
値を 50 に設定(既定では存在しないため追加が必要、既定値は 1)
--minLocalRequestFreeThreads~
76*N に設定(既定値は 4)
--minFreeThreads~
値を 88*N に設定(既定値は 8)
--maxconnection~
値を 12*N に設定(既定値は ?)
-競合削減のための推奨スレッド処理設定~
>第 17 章 「.NET アプリケーション パフォーマンスのチューニング」~
http://msdn.microsoft.com/ja-jp/library/ff647813.aspx
|構成設定|規定値 (.NET 1.1)|推奨値|h
|maxIoThreads|20|100|
|maxWorkerThreads|20|100|
|minFreeThreads|8|88*N|
|minLocalRequestFreeThreads|4|76*N|
|maxconnection|2|12*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>
**aspnet.config [#h1f15c0a]
*MaxConcurrentRequestsPerCPU レジストリ [#q46b6d2f]
**IIS 7 以降のクラシック・モード+.NET 4 以前 [#f9443394]
MaxConcurrentRequestsPerCPU 設定([[下記のレジストリ設定>#t5881785]])を使用してください。
**IIS 7 以降の統合モード+.NET 3.5 以前 [#t5881785]
IIS 7 以降の統合モード+.NET 3.5 以前では以下のレジストリ設定を使用できる。
-IIS 7 での ASP.NET 2.0 の互換性に影響する変更点~
http://technet.microsoft.com/ja-jp/library/ff454090
***変更点 [#be0ea2a8]
統合モードでは、ASP.NET スレッド設定を使用して要求の同時実行性を制御できない。
-processModel 構成セクションの
--maxWorkerThreads 設定
-system.web/httpRuntime 構成セクションの
--minFreeThreads と minLocalRequestFreeThreads 設定、
は、ASP.NET で使用されるスレッド メカニズムを制御しなくなりました。
***設定方法 [#db912418]
その代わり、ASP.NET は IIS スレッド プールに依存し、
-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\2.0.50727.0 キー内の
--MaxConcurrentRequestsPerCPU の DWORD 値 (既定値は 12)
を設定することで、同時実行要求の最大数を制御できるようになりました。
この設定はグローバルなので、
-アプリケーション プールや
-アプリケーションごとに
変更することはできません。
*aspnet.config [#h1f15c0a]
**IIS 7 以降の統合モード+.NET 3.5 SP1 以降 [#x5e90679]
IIS 7 以降の統合モード+.NET 3.5 SP1 以降ではaspnet.configで以下の設定を使用できる。~
※ Manual上は、.NET 4 以降になっているが、実際は.NET 3.5 SP1から採用されている。
-Web 設定スキーマ~
http://msdn.microsoft.com/ja-jp/library/dd560844.aspx
--system.web 要素 (Web 設定)~
http://msdn.microsoft.com/ja-jp/library/dd560839.aspx
---applicationPool 要素 (Web 設定)~
http://msdn.microsoft.com/ja-jp/library/dd560842.aspx
ASP.NET アプリケーションが~
IIS 7.0 以降のバージョンの統合モードで実行されている場合に、~
プロセス全体の動作を管理するために ASP.NET で使用される構成設定を指定します。
-IIS 6 を実行する場合や、
-IIS 7.0 をクラシック モード
-または ISAPI モードで実行する場合は、
これらの設定は無視されます。
***ファイルの場所 [#bd4ab853]
-32ビットの場合:~
%windir%\Microsoft.NET\Framework\[.NETバージョン]\aspnet.config
-64ビットの場合:~
%windir%\Microsoft.NET\Framework64\[.NETバージョン]\aspnet.config
***設定方法 [#saafb317]
-applicationPool要素の属性
--maxConcurrentRequestsPerCPU
---ASP.NET で許可する CPU あたりの同時要求数を指定する。
---.NET 4 での既定の設定は "5000"
--maxConcurrentThreadsPerCPU
---各 CPU のアプリケーション プールで実行できるスレッド数を指定する。
---既定の設定 0 は、CPU あたりの作成可能なスレッド数を制限しない。
---ただし、作成可能なスレッド数には、CLRのスレッド プールによる制限も適用される。
--requestQueueLimit~
---ASP.NET のキューに配置できる要求の最大数を指定する。
---複数の ASP.NET アプリケーションを 1 つのアプリケーション プールでホストする場合、~
そのアプリケーション プールに対する要求の累積数を制限するために使用する。
---.NET 4 での既定の設定は "5000"
***設定例 [#r58b49bf]
既定値
<configuration>
<system.web>
<applicationPool
maxConcurrentRequestsPerCPU="5000"
maxConcurrentThreadsPerCPU="0"
requestQueueLimit="5000" />
</system.web>
</configuration>
**applicationHost.config [#udc61300]
アプリケーション プールのプロセス モデル設定 processModel~
http://technet.microsoft.com/ja-jp/library/ee431629.aspx
*applicationHost.config [#udc61300]
ApplicationHost.configにも、[[machine.config>#p4535954]]と同様にprocessModelタグがあるが、~
[[machine.config>#p4535954]]のprocessModelタグとは異なり、同時実行制御に関する設定は存在しない。
***ファイルの場所 [#l7b5e635]
%windir%?system32?inetsrv?config\ApplcationHost.config
***設定方法 [#kea08062]
ApplicationHost.configにも、Machine.configと同様に~
processModelタグがあるが、Machine.configのprocessModelタグとは異なる。
-applicationPoolのリサイクリングなどの設定ができる。
-同時実行制御に関する設定(maxWorkerThreads等)は存在しない。
**ファイルの場所 [#l7b5e635]
%windir%?system32?inetsrv?config\ApplcationHost.config
**設定可能な値 [#kea08062]
-アプリケーション プールのプロセス モデル設定 processModel~
http://technet.microsoft.com/ja-jp/library/ee431629.aspx
>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>
*統合モード(クラシック・モードからの変更点 [#v37ebed8]
IIS 7 以降の統合モード+.NET 3.5 以前では以下のレジストリ設定を使用できる。
-IIS 7 での ASP.NET 2.0 の互換性に影響する変更点~
http://technet.microsoft.com/ja-jp/library/ff454090
**同時実行制御の変更点 [#be0ea2a8]
統合モードでは、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)
を設定することで、同時実行要求の最大数を制御できるようになりました。
この設定はグローバルなので、
-アプリケーション プールや
-アプリケーションごとに
変更することはできません。
**同時実行性の制御方法 [#h00d0178]
クラシック・モード+.NET 4 以前でアプリケーションの同時実行性を制御するには、
>MaxConcurrentRequestsPerCPU 設定
(上記のレジストリ設定)を使用してください。
***補足1 [#x1c2f262]
*補足 [#l1c21577]
**補足1 (統合モード) [#x1c2f262]
統合モードでは ASP.NET アプリケーション キューが使用されないので、
>パフォーマンス カウンター:"ASP.NET Applications\Requests in Application Queue"
の値が常に 0 になる
***補足2 [#k1a94dda]
IIS 7 は web.config ファイルのASP.NET 変更通知設定に関係なく、~
web.config ファイルを監視し、これが変更されると、~
**補足2 (IIS 7) [#k1a94dda]
IIS 7 は [[Web.config>#nf687ad7]] ファイルのASP.NET 変更通知設定に関係なく、~
[[Web.config>#nf687ad7]] ファイルを監視し、これが変更されると、~
常に ASP.NET アプリケーションを再起動するため、~
system.web/httpRuntime 構成セクションの
-waitChangeNotification
-maxWaitChangeNotification
属性の効果がない。
----
Tags: [[:.NET開発]], [[:ASP.NET]]