Web 限制 < webLimits>
概觀
元素 <webLimits>
會指定 TCP/IP 連線和頻寬限制。
每 60 秒,背景工作進程會檢查其閒置時間。 如果目前的閒置時間大於 Windows 進程啟用服務所指定的閒置逾時值 (WAS) ,背景工作進程就會起始關機。 當您為 dynamicIdleThreshold 屬性指定非零值時,WAS 會根據使用的 RAM 數量,動態減少此閒置逾時。
dynamicIdleThreshold屬性代表認可的實體 RAM 數量。 例如,如果您的伺服器已安裝 2 GB (GB) 的實體記憶體,而且您將 dynamicIdleThreshold 屬性值設定為 200,則您已認可 200% (4 GB) 實體 RAM 以供使用。 根據下表,當 80% 為 4 GB 時,即已配置 160% (3.2 GB) ,WAS 會開始減少所有背景工作進程 50% 的閒置逾時。
下表列出 在 dynamicIdleThreshold 值的預先決定百分比發生的閒置逾時減少。
Dynamic idle threshold percentage reached |
Dynamic idle time-out reduction |
---|---|
75 或更低 | WAS 會使用原始閒置逾時設定。 |
80 | WAS 會針對已設定閒置逾時的所有背景工作進程,將閒置逾時設定為原始值的一半。 |
85 | WAS 會針對已設定閒置逾時的所有背景工作進程,將閒置逾時設定為原始值的一分之一四。 |
90 | WAS 會針對已設定閒置逾時的所有背景工作進程,將閒置逾時設定為原始值的一八分之一。 |
95 | WAS 會針對已設定閒置逾時的所有背景工作進程,將閒置逾時設定為原始值的十六分之一。 |
100 | WAS 會針對已設定閒置逾時的所有背景工作進程,將閒置逾時設定為原始值的 30 秒。 |
動態網站啟用
動態網站啟用可讓您延遲啟用網站,藉此協助 IIS 解決延展性問題。 當網站數目大於限制時,IIS 將不會在服務啟動時啟用任何網站。 它不會在啟動時為每個已設定的網站建立佇列和系結,如先前在 IIS 8.0 和更早版本中完成。 相反地,它會建立單一佇列來接聽所有月臺的要求,並具有單一系結。 WAS 會載入網站、其系結、應用程式、應用程式集區及其應用程式集區設定的清單。 當月臺的要求送達時,IIS 會使用該清單來建立佇列並註冊網站的系結。 此時,HTTP.sys將要求放在佇列中,WAS 會啟動背景工作進程,並處理要求。
使用動態網站啟用時,IIS 服務可能會更快啟動,並耗用較少的記憶體。 IIS 也應該花較少的時間來重新開機,因為它不需要釋放所有已註冊的佇列和 HTTP 系結。 在此內容中啟用是指 IIS 向 HTTP 通訊協定堆疊 (HTTP.sys) 註冊月臺的程式。 此啟用與建立背景工作進程不同,只有在收到網站要求時才會發生。
當伺服器處理的網站數目大於預先設定的限制時,就會啟用動態網站啟用。 根據預設,該限制為 100。 如果您未變更該值,則會在裝載超過 100 個月臺的伺服器上動態啟用月臺。 針對 100 或更少網站,另一方面,所有網站都會在啟動時啟用。 您可以變更 dynamicRegistrationThreshold 屬性來變更該限制。 請注意,具有較少月臺之伺服器的效能提升將會比明顯更多的月臺小。
注意
啟用動態網站啟用時,不允許使用者使用 IP 位址來傳送 Web 要求。 例如,如果使用者嘗試流覽至 HTTP://127.0.0.1 ,他們會收到 400 不正確的要求錯誤。
相容性
版本 | 備註 |
---|---|
IIS 10.0 | 在 <webLimits> IIS 10.0 中未修改專案。 |
IIS 8.5 | 屬性 dynamicRegistrationThreshold 已在 IIS 8.5 中新增。 |
IIS 8.0 | 在 IIS 8.0 中未修改專案 <webLimits> 。 |
IIS 7.5 | 未 <webLimits> 在 IIS 7.5 中修改專案。 |
IIS 7.0 | 專案 <webLimits> 是在 IIS 7.0 中引進的。 |
IIS 6.0 | 元素 <webLimits> 會取代下列 IIS 6.0 中繼基底設定:
|
安裝程式
專案 <webLimits>
包含在 IIS 7 和更新版本的預設安裝中。
作法
如何設定動態網站啟用的下限
(IIS) 管理員開啟 Internet Information Services:
如果您使用 Windows Server 2012 R2:
- 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services] ([IIS) 管理員]。
如果您使用 Windows 8.1:
- 按住Windows鍵,按字母X,然後按一下[主控台]。
- 按一下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
在 [連線] 窗格中,選取伺服器,然後在[管理] 區域中按兩下 [組態編輯器]。
在 [ 組態編輯器] 中,針對 [ 區段] 展開
system.applicationHost
,然後選取 [webLimits]。輸入 dynamicRegistrationThreshold的值。
在 [ 動作 ] 窗格中,按一下 [ 套用]。
組態
屬性
屬性 | 描述 |
---|---|
connectionTimeout |
選擇性 timeSpan 屬性。 指定 IIS 在中斷連接視為非使用中連線之前等候的時間。 預設值是 00:02:00 。 |
demandStartThreshold |
選擇性 uint 屬性。 指定允許在 Web 服務器上同時執行的背景工作進程數目上限。 您可以使用這個屬性來防止 IIS 伺服器在啟動太多背景工作進程時變得沒有回應。 預設值是 2147483647 。 |
dynamicIdleThreshold |
選擇性 uint 屬性。 指定認可實體 RAM 的百分比。 有效的整數範圍是從 0 到 10000。 WAS 會使用此臨界值來動態縮短背景工作進程閒置逾時。 如需詳細資訊,請參閱<備註>一節。 預設值是 0 。 |
dynamicRegistrationThreshold |
選擇性 uint 屬性。 指定動態網站啟用的下限。 當伺服器上設定的網站數目超過此屬性的值時,服務將不會在服務啟動時啟用所有網站。 相反地,IIS 會在收到網站的第一個要求時啟用每個網站。 當設定的網站數目小於或等於此數目時,當服務啟動時,將會啟用所有已設定的網站。 當個別啟動月臺時,IIS 所需的系統資源數量會較低,特別是在大量網站不常存取時。 網站的第一個要求可能需要更多時間,因為網站已啟用,但後續存取會正常回應。 預設值是 100 。 |
headerWaitTimeout |
選擇性 timeSpan 屬性。 指定伺服器等候所有 HTTP 標頭等候要求在中斷用戶端連線之前收到要求的時間。 此屬性的目的是協助防止拒絕服務 (DoS) 攻擊的常見變體,這些攻擊會嘗試達到最大連線限制,並讓這些連線保持連線。 預設值是 00:00:00 。 |
maxGlobalBandWidth |
選擇性 uint 屬性。 指定伺服器的總頻寬上限。 將值設定為 0 會啟用伺服器的無限制頻寬。 預設值是 4294967295 。 |
minBytesPerSecond |
選擇性 uint 屬性。 指定將回應傳送給用戶端時,HTTP.sys強制執行的最小輸送量速率,以位元組為單位。 minBytesPerSecond屬性可防止惡意或故障的軟體用戶端使用資源,方法是使用最少的資料開啟連線。 如果輸送量速率低於 minBytesPerSecond 設定,則會終止連線。 目前的實作只會在經過最少頻寬傳輸速率時,將整個回應串流回連線用戶端之後,才會終止連線。 如果傳輸速率低於 minBytesPerSecond 指定的值一小段時間,但整體傳輸速率較高,則不會終止連線。 預設值是 240 。 |
子元素
無。
組態範例
下列組態範例會將連線逾時設定為 1 分鐘、認可實體 RAM 的百分比設為 150、標頭等候逾時至 30 秒,以及每秒允許的輸送量速率下限為 500 個位元組。
<configuration>
<system.applicationHost>
<webLimits connectionTimeout="00:01:00"
dynamicIdleThreshold="150"
headerWaitTimeout="00:00:30"
minBytesPerSecond="500"
/>
</system.applicationHost>
</configuration>
範例程式碼
下列程式碼範例會將連線逾時設定為 1 分鐘、認可實體 RAM 的百分比設定為 150、標頭等候逾時為 30 秒,以及每秒允許的輸送量速率下限為 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
注意
當您使用AppCmd.exe設定這些設定時,請務必將 認可 參數 apphost
設定為 。 這會將組態設定認可至ApplicationHost.config檔案中適當的位置區段。
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()