Freigeben über


Weblimits <webLimits>

Übersicht

Das <webLimits>-Element gibt Verbindungs- und Bandbreitenbeschränkungen für TCP/IP an.

Alle 60 Sekunden überprüft ein Arbeitsprozess, wie lange er im Leerlauf war. Wenn die aktuelle Leerlaufzeit den durch den Windows-Prozessaktivierungsdienst (Windows Process Activation Service, WAS) angegebenen Leerlauftimeoutwert übersteigt, initiiert der Arbeitsprozess ein Herunterfahren. Wenn Sie für das dynamicIdleThreshold-Attribut einen Wert ungleich Null angeben, reduziert WAS dieses Leerlauftimeout dynamisch je nach verwendetem RAM.

Das dynamicIdleThreshold-Attribut stellt die Menge des zugesicherten physischen RAM dar. Wenn auf Ihrem Server beispielsweise zwei Gigabytes (GB) physischer Arbeitsspeicher installiert sind und Sie das dynamicIdleThreshold-Attribut auf „200“ festlegen, haben Sie 200 Prozent (4 GB) physischen RAM für die Verwendung zugesichert. Die folgende Tabelle zeigt: Wenn 80 Prozent von 4 GB physischem RAM (also 160 Prozent bzw. 3,2 GB) zugeordnet werden, beginnt WAS damit, das Leerlauftimeout aller Arbeitsprozesse um 50 Prozent zu verringern.

In der folgenden Tabelle sind die Leerlauftimeoutsenkungen aufgeführt, die bei bestimmten Prozentsätzen des dynamicIdleThreshold-Werts vorgenommen werden.

Dynamic idle threshold percentage reached Dynamic idle time-out reduction
75 oder niedriger WAS verwendet die ursprünglichen Leerlauftimeouteinstellungen.
80 WAS legt das Leerlauftimeout für alle Arbeitsprozesse mit konfiguriertem Leerlauftimeout auf die Hälfte des ursprünglichen Werts fest.
85 WAS legt das Leerlauftimeout für alle Arbeitsprozesse mit konfiguriertem Leerlauftimeout auf ein Viertel des ursprünglichen Werts fest.
90 WAS legt das Leerlauftimeout für alle Arbeitsprozesse mit konfiguriertem Leerlauftimeout auf ein Achtel des ursprünglichen Werts fest.
95 WAS legt das Leerlauftimeout für alle Arbeitsprozesse mit konfiguriertem Leerlauftimeout auf ein Sechzehntel des ursprünglichen Werts fest.
100 WAS legt das Leerlauftimeout für alle Arbeitsprozesse mit konfiguriertem Leerlauftimeout auf 30 Sekunden des ursprünglichen Werts fest.

Dynamische Siteaktivierung

Die dynamische Siteaktivierung ermöglicht die Verzögerung der Aktivierung von Websites und hilft IIS so bei der Behandlung von Skalierbarkeitsproblemen. Wenn die Anzahl von Websites einen Grenzwert übersteigt, aktiviert IIS keine der Sites, wenn der Dienst gestartet wird. Anders als in IIS 8.0 und früheren Versionen werden beim Start keine Warteschlange und keine Bindung für die einzelnen konfigurierten Sites mehr erstellt. Stattdessen wird eine einzelne Warteschlange erstellt, die auf Anforderungen für alle Sites lauscht und über eine einzelne Bindung verfügt. WAS lädt eine Liste mit den Sites, ihren Bindungen, ihren Anwendungen, ihren Anwendungspools und ihren Anwendungspooleinstellungen. Wenn eine Anforderung für eine Site eingeht, verwendet IIS diese Liste, um eine Warteschlange zu erstellen und eine Bindung für die Site zu registrieren. An diesem Punkt platziert „HTTP.sys“ die Anforderung in der Warteschlange, WAS startet den Arbeitsprozess, und die Anforderung wird verarbeitet.

Mit der dynamischen Siteaktivierung startet der IIS-Dienst wahrscheinlich schneller und beansprucht weniger Arbeitsspeicher. IIS sollte auch deutlich schneller neu gestartet werden, da nicht alle registrierten Warteschlangen und Bindungen mit HTTP freigegeben werden müssen. Der Begriff „Aktivierung“ bezieht sich in diesem Kontext auf einen Prozess, bei dem IIS eine Site beim HTTP-Protokollstapel (HTTP.sys) registriert. Diese Aktivierung ist nicht das Gleiche wie die Erstellung eines Arbeitsprozesses, da ein Arbeitsprozess nur erstellt wird, wenn eine Anforderung für eine Site eingeht.

Die dynamische Siteaktivierung wird aktiviert, wenn die Anzahl der von einem Server verarbeiteten Sites einen vorgegebenen Grenzwert übersteigt. Dieser Grenzwert ist standardmäßig auf „100“ festgelegt. Wenn Sie diesen Wert nicht ändern, wird eine Site auf einem Server, auf dem mehr als 100 Sites gehostet werden, dynamisch aktiviert. Sind dagegen maximal 100 Sites vorhanden, werden alle beim Start aktiviert. Dieser Grenzwert kann durch Ändern des dynamicRegistrationThreshold-Attributs geändert werden. Beachten Sie, dass die Leistungssteigerung bei einem Server mit einer geringeren Anzahl von Sites geringer ausfällt als bei einem Server mit deutlich mehr Sites.

Hinweis

Wenn die dynamische Siteaktivierung aktiviert ist, dürfen Benutzer keine IP-Adresse verwenden, um eine Webanforderung zu senden. Wenn Benutzer beispielsweise versuchen, HTTP://127.0.0.1 aufzurufen, erhalten sie einen Fehler mit dem Fehlercode 400 (ungültige Anforderung).

Kompatibilität

Version Hinweise
IIS 10.0 Das <webLimits>-Element wurde in IIS 10.0 nicht geändert.
IIS 8.5 Das dynamicRegistrationThreshold-Attribut wurde in IIS 8.5 hinzugefügt.
IIS 8.0 Das <webLimits>-Element wurde in IIS 8.0 nicht geändert.
IIS 7.5 Das <webLimits>-Element wurde in IIS 7.5 nicht geändert.
IIS 7.0 Das <webLimits>-Element wurde in IIS 7.0 eingeführt.
IIS 6.0 Das <webLimits>-Element ersetzt die folgenden Metabasiseinstellungen von IIS 6.0:
  • ConnectionTimeout
  • HeaderWaitTimeout
  • MaxGlobalBandwidth
  • MinFileBytesPerSec

Setup

Das <webLimits>-Element ist in der Standardinstallation von IIS 7 und höheren Versionen enthalten.

Gewusst wie

Konfigurieren der Untergrenze der dynamischen Siteaktivierung

  1. Öffnen Sie Internetinformationsdienste-Manager (IIS-Manager):

    • Vorgehensweise unter Windows Server 2012 R2:

      • Klicken Sie auf der Taskleiste auf Server-Manager, dann auf Tools und danach auf Internetinformationsdienste-Manager (IIS-Manager).
    • Vorgehensweise unter Windows Server 8.1:

      • Halten Sie die WINDOWS-TASTE gedrückt, drücken Sie den Buchstaben X, und klicken Sie dann auf Systemsteuerung.
      • Klicken Sie auf Verwaltung, und doppelklicken Sie dann auf Internetinformationsdienste-Manager (IIS-Manager).
  2. Wählen Sie im Bereich Verbindungen den Server aus, und doppelklicken Sie dann im Bereich Verwaltung auf Konfigurations-Editor.

  3. Erweitern Sie im Konfigurations-Editor unter Abschnitt den Eintrag system.applicationHost, und wählen Sie anschließend webLimits aus.

  4. Geben Sie einen Wert für dynamicRegistrationThreshold ein.

  5. Klicken Sie im Bereich Aktion auf Übernehmen.

    Screenshot showing how to configure dynamic site activation using the Configuration Editor.

Konfiguration

Attribute

Attribut Beschreibung
connectionTimeout Optionales timeSpan-Attribut.

Gibt die Zeit an, die IIS wartet, bevor eine Verbindung getrennt wird, die als inaktiv betrachtet wird.

Der Standardwert ist 00:02:00.
demandStartThreshold Optionales uint-Attribut.

Gibt die maximale Anzahl von Arbeitsprozessen an, die gleichzeitig auf einem Webserver ausgeführt werden dürfen. Sie können diese Eigenschaft verwenden, um zu verhindern, dass IIS-Server nicht mehr reagieren, wenn zu viele Arbeitsprozesse gestartet wurden.

Der Standardwert ist 2147483647.
dynamicIdleThreshold Optionales uint-Attribut.

Gibt den Prozentsatz des zugesicherten physischen RAM an. Der gültige ganzzahlige Bereich liegt zwischen 0 und 10.000. WAS verwendet diesen Schwellenwert, um die Leerlaufzeit von Arbeitsprozessen dynamisch zu verkürzen. Weitere Informationen finden Sie im Abschnitt Hinweise.

Der Standardwert ist 0.
dynamicRegistrationThreshold Optionales uint-Attribut.

Gibt die Untergrenze der dynamischen Siteaktivierung an. Wenn die Anzahl der konfigurierten Websites auf einem Server den Wert dieses Attributs übersteigt, aktiviert der Dienst nicht alle Websites, wenn der Dienst gestartet wird. Stattdessen aktiviert IIS die einzelnen Sites, wenn die erste Anforderung für die Site eingeht. Wenn die Anzahl der konfigurierten Sites kleiner oder gleich dieser Zahl ist, werden alle konfigurierten Websites aktiviert, wenn der Dienst gestartet wird.

IIS benötigt weniger Systemressourcen, wenn Sites einzeln aktiviert werden. Das gilt insbesondere, wenn auf einen Großteil der Sites nur selten zugegriffen wird. Die erste Anforderung für die Site dauert ggf. länger, da die Site erst aktiviert werden muss. Bei nachfolgenden Zugriffen ist die Reaktionszeit jedoch normal.

Der Standardwert ist 100.
headerWaitTimeout Optionales timeSpan-Attribut.

Gibt an, wie lange der Server wartet, bis alle HTTP-Header für die Anforderung empfangen wurden, bevor die Verbindung mit dem Client getrennt wird. Dieses Attribut dient dazu, eine häufige Variante des DoS-Angriffs (Denial of Service) zu verhindern, bei dem versucht wird, Verbindungslimits auszureizen und diese Verbindungen aufrechtzuerhalten.

Der Standardwert ist 00:00:00.
maxGlobalBandWidth Optionales uint-Attribut.

Gibt die maximale Gesamtbandbreite für den Server an. Wenn der Wert auf „0“ festgelegt wird, wird unbegrenzte Bandbreite für den Server aktiviert.

Der Standardwert ist 4294967295.
minBytesPerSecond Optionales uint-Attribut.

Gibt die minimale Durchsatzrate in Bytes an, die von „HTTP.sys“ beim Senden einer Antwort an den Client erzwungen wird. Das minBytesPerSecond-Attribut verhindert, dass schädliche oder fehlerhafte Softwareclients Ressourcen verwenden, indem sie eine Verbindung mit minimalen Daten aufrechterhalten. Wenn die Durchsatzrate niedriger als die minBytesPerSecond-Einstellung ist, wird die Verbindung beendet.

Die aktuelle Implementierung beendet die Verbindung erst nach Ablauf der Zeit, die erforderlich wäre, um die gesamte Antwort mit der minimalen Bandbreitenübertragungsrate an den Verbindungsclient zurückzustreamen. Wenn die Übertragungsrate nur kurzzeitig unter den durch minBytesPerSecond angegebenen Wert sinkt, die Gesamtübertragungsrate aber höher ist, wird die Verbindung nicht beendet.

Der Standardwert ist 240.

Untergeordnete Elemente

Keine.

Konfigurationsbeispiel

Im folgenden Konfigurationsbeispiel wird das Verbindungstimeout auf eine Minute festgelegt, der Prozentsatz des zugesicherten physischen RAMs wird auf „150“ festgelegt, die Header-Wartezeit wird auf 30 Sekunden festgelegt, und die minimale zulässige Durchsatzrate wird auf 500 Bytes pro Sekunde festgelegt.

<configuration>
   <system.applicationHost>
      <webLimits connectionTimeout="00:01:00"
         dynamicIdleThreshold="150"
         headerWaitTimeout="00:00:30"
         minBytesPerSecond="500"
      />
   </system.applicationHost>
</configuration>

Beispielcode

In den folgenden Codebeispielen wird das Verbindungstimeout auf eine Minute festgelegt, der Prozentsatz des zugesicherten physischen RAMs wird auf „150“ festgelegt, die Header-Wartezeit wird auf 30 Sekunden festgelegt, und die minimale zulässige Durchsatzrate wird auf 500 Bytes pro Sekunde festgelegt.

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

Hinweis

Legen Sie den commit-Parameter auf apphost fest, wenn Sie „AppCmd.exe“ verwenden, um diese Einstellungen zu konfigurieren. Dadurch werden die Konfigurationseinstellungen auf den entsprechenden Speicherortabschnitt in der Datei „ApplicationHost.config“ festgelegt.

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()