Web 制限 <webLimits>
- 概要
- 互換性
- セットアップ
- 方法
- 構成
- サンプル コード
概要
<webLimits>
要素は、TCP/IP 接続と帯域幅の制限を指定します。
ワーカー プロセスは、60 秒ごとにアイドル状態の継続時間をチェックします。現在のアイドル時間が、Windows プロセス起動サービス (WAS) によって指定されたアイドル タイムアウト値よりも長い場合、ワーカー プロセスはシャットダウンを開始します。dynamicIdleThreshold 属性に 0 以外の値を指定すると、WAS は RAM の使用量に基づいて、このアイドル タイムアウトを動的に減らします。
dynamicIdleThreshold 属性は、コミットされた物理 RAM 容量を表します。たとえば、サーバーに 2 ギガバイト (GB) の物理メモリがインストールされており、dynamicIdleThreshold 属性値を 200 に設定すると、物理 RAM の 200% (4 GB) が使用のためにコミットされます。次の表に基づくと、4 GB の中の 80%、つまり物理 RAM の 160% (3.2 GB) が割り当てられると、WAS はすべてのワーカー プロセスのアイドル タイムアウトを 50% 減らし始めます。
次の表は、dynamicIdleThreshold 値との関連で事前に指定された割合 (%) で発生するアイドル タイムアウトの減少を示します。
動的アイドルしきい値の割合 (%) が次の値に到達 |
動的なアイドルタイムアウトの減少 |
---|---|
75 以下 | WAS は元のアイドル タイムアウト設定を使用。 |
80 | WAS は、アイドル タイムアウトが構成されているすべてのワーカー プロセスで、アイドル タイムアウトを元の値の 2 分の 1 に設定。 |
85 | WAS は、アイドル タイムアウトが構成されているすべてのワーカー プロセスで、アイドル タイムアウトを元の値の 4 分の 1 に設定。 |
90 | WAS は、アイドル タイムアウトが構成されているすべてのワーカー プロセスで、アイドル タイムアウトを元の値の 8 分の 1 に設定。 |
95 | WAS は、アイドル タイムアウトが構成されているすべてのワーカー プロセスで、アイドル タイムアウトを元の値の 16 分の 1 に設定。 |
100 | WAS は、アイドル タイムアウトが構成されているすべてのワーカー プロセスで、アイドル タイムアウトを元の値の 32 分の 1 に設定。 |
互換性
IIS 7.0 | IIS 6.0 | |
---|---|---|
説明 | <webLimits> は IIS 7.0 で新たに導入された要素です。 |
<webLimits> 要素は、IIS 6.0 の次のメタベース設定に代わるものです。
ConnectionTimeout |
セットアップ
<webLimits>
要素は、IIS 7.0 の既定のインストールに含まれています。
方法
IIS 7.0 には、Web 制限を構成するためのユーザー インターフェイスはありません。Web 制限の設定をプログラムを使用して構成する方法の例については、このドキュメントの「サンプル コード」セクションを参照してください。
構成
属性
属性 | 説明 |
---|---|
connectionTimeout |
オプションの timeSpan 属性。 アクティブでないと見なされる接続を切断するまでに IIS が待機する時間を指定します。 既定値は 00:02:00 です。 |
demandStartThreshold |
オプションの uint 属性。 1 台の Web サーバー上で同時に実行を許可されるワーカー プロセスの最大数を指定します。このプロパティを使用すると、開始されたワーカー プロセスの数が多すぎて、IIS サーバーが応答を停止してしまう事態を防ぐことができます。 既定値は 2147483647 です。 |
dynamicIdleThreshold |
オプションの uint 属性。 コミットされた物理 RAM の割合 (%) を指定します。有効な整数の範囲は 0 ~ 10000 です。WAS は、このしきい値を使用して、ワーカー プロセスのアイドル タイムアウトを動的に短縮します。詳細については、「備考」セクションを参照してください。 既定値は 0 です。 |
headerWaitTimeout |
オプションの timeSpan 属性。 サーバーで、クライアントを切断するまでに、要求のすべての HTTP ヘッダーが受信されるまで待機する時間を指定します。この属性の目的は、サービス拒否 (DoS) 攻撃の一般的な亜種 (接続制限を最大限まで使用し、それらの接続を保持しようとする) から保護することです。 既定値は 00:00:00 です。 |
maxGlobalBandWidth |
オプションの uint 属性。 サーバーの帯域幅の合計の最大値を指定します。この値を 0 に設定すると、サーバーで無制限の帯域幅が有効になります。 既定値は 4294967295 です。 |
minBytesPerSecond |
オプションの uint 属性。 HTTP.sys がクライアントからのデータをサーバーに送信する際、およびサーバーからのデータをクライアントに返す際に、HTTP.sys に適用される最小スループットをバイト数で指定します。minBytesPerSecond 属性は、悪意のあるソフトウェア クライアント、または異常が発生しているソフトウェア クライアントが、最小のデータで接続を開いたままにして、リソースを消費してしまうことを防ぎます。スループットが minBytesPerSecond の設定よりも小さい場合、接続は終了されます。 既定値は 240 です。 |
子要素
なし。
構成サンプル
次の構成サンプルでは、接続のタイムアウトを 1 分に、コミットされた物理 RAM の割合 (%) を 150 に、ヘッダーを待機するタイムアウトを 30 秒に、許可される最小のスループットを 1 秒あたり 500 バイトに設定します。
<configuration>
<system.applicationHost>
<webLimits connectionTimeout="00:01:00"
dynamicIdleThreshold="150"
headerWaitTimeout="00:00:30"
minBytesPerSecond="500"
/>
</system.applicationHost>
</configuration>
サンプル コード
次のコード サンプルでは、接続のタイムアウトを 1 分に、コミットされた物理 RAM の割合 (%) を 150 に、ヘッダーを待機するタイムアウトを 30 秒に、許可される最小のスループットを 1 秒あたり 500 バイトに設定します。
AppCmd.exe
appcmd.exe set config -section:system.applicationHost/webLimits /connectionTimeout:"00:01:00" /commit:apphost
appcmd.exe set config -section:system.applicationHost/webLimits /dynamicIdleThreshold:"150" /commit:apphost
appcmd.exe set config -section:system.applicationHost/webLimits /headerWaitTimeout:"00:00:30" /commit:apphost
appcmd.exe set config -section:system.applicationHost/webLimits /minBytesPerSecond:"500" /commit:apphost
C#
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample
{
private static void Main()
{
using (ServerManager serverManager = new ServerManager())
{
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection webLimitsSection = config.GetSection("system.applicationHost/webLimits");
webLimitsSection["connectionTimeout"] = TimeSpan.Parse("00:01:00");
webLimitsSection["dynamicIdleThreshold"] = 150;
webLimitsSection["headerWaitTimeout"] = TimeSpan.Parse("00:00:30");
webLimitsSection["minBytesPerSecond"] = 500;
serverManager.CommitChanges();
}
}
}
VB.NET
Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample
Sub Main()
Dim serverManager As ServerManager = New ServerManager
Dim config As Configuration = serverManager.GetApplicationHostConfiguration
Dim webLimitsSection As ConfigurationSection = config.GetSection("system.applicationHost/webLimits")
webLimitsSection("connectionTimeout") = TimeSpan.Parse("00:01:00")
webLimitsSection("dynamicIdleThreshold") = 150
webLimitsSection("headerWaitTimeout") = TimeSpan.Parse("00:00:30")
webLimitsSection("minBytesPerSecond") = 500
serverManager.CommitChanges()
End Sub
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var webLimitsSection = adminManager.GetAdminSection("system.applicationHost/webLimits", "MACHINE/WEBROOT/APPHOST");
webLimitsSection.Properties.Item("connectionTimeout").Value = "00:01:00";
webLimitsSection.Properties.Item("dynamicIdleThreshold").Value = 150;
webLimitsSection.Properties.Item("headerWaitTimeout").Value = "00:00:30";
webLimitsSection.Properties.Item("minBytesPerSecond").Value = 500;
adminManager.CommitChanges();
VBScript
Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set webLimitsSection = adminManager.GetAdminSection("system.applicationHost/webLimits", "MACHINE/WEBROOT/APPHOST")
webLimitsSection.Properties.Item("connectionTimeout").Value = "00:01:00"
webLimitsSection.Properties.Item("dynamicIdleThreshold").Value = 150
webLimitsSection.Properties.Item("headerWaitTimeout").Value = "00:00:30"
webLimitsSection.Properties.Item("minBytesPerSecond").Value = 500
adminManager.CommitChanges()