共用方式為


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 中繼基底設定:
  • ConnectionTimeout
  • HeaderWaitTimeout
  • MaxGlobalBandwidth
  • MinFileBytesPerSec

安裝程式

專案 <webLimits> 包含在 IIS 7 和更新版本的預設安裝中。

作法

如何設定動態網站啟用的下限

  1. (IIS) 管理員開啟 Internet Information Services

    • 如果您使用 Windows Server 2012 R2:

      • 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows 8.1:

      • 按住Windows鍵,按字母X,然後按一下[主控台]。
      • 按一下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
  2. 在 [連線] 窗格中,選取伺服器,然後在[管理] 區域中按兩下 [組態編輯器]。

  3. 在 [ 組態編輯器] 中,針對 [ 區段] 展開 system.applicationHost ,然後選取 [webLimits]。

  4. 輸入 dynamicRegistrationThreshold的值。

  5. 在 [ 動作 ] 窗格中,按一下 [ 套用]。

    顯示如何使用組態編輯器設定動態月臺啟用的螢幕擷取畫面。

組態

屬性

屬性 描述
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()