Partager via


Limites web <webLimits>

Vue d’ensemble

L’élément <webLimits> spécifie les limites TCP/IP et de bande passante.

Toutes les 60 secondes, un processus de travail vérifie combien de temps il a été inactif. Si son délai d’inactivité actuel est supérieur à la valeur du délai d'expiration spécifié par le service d'activation des processus Windows (WAS), le processus de travail lance un arrêt. Lorsque vous spécifiez une valeur différente de zéro pour l’attribut dynamicIdleThreshold, WAS réduit dynamiquement ce délai d’inactivité en fonction de la quantité de RAM utilisée.

L’attribut dynamicIdleThreshold représente la quantité de RAM physique validée. Par exemple, si votre serveur a 2 gigaoctets (Go) de mémoire physique installée et que vous définissez la valeur de l’attribut dynamicIdleThreshold sur 200, vous avez validé 200 % (4 Go) de RAM physique à utiliser. Selon le tableau suivant, quand 80 pour cent de 4 Go, c’est-à-dire 160 % (3,2 Go) de RAM physique sont alloués, WAS commence à réduire le délai d’inactivité de tous les processus de travail de 50 %.

Le tableau suivant répertorie les réductions de délai d’inactivité qui se produisent à des pourcentages prédéterminés de la valeur dynamicIdleThreshold.

Dynamic idle threshold percentage reached Dynamic idle time-out reduction
75 ou inférieur WAS utilise les paramètres de délai d’inactivité d’origine.
80 WAS définit le délai d’inactivité sur une moitié de la valeur d’origine pour tous les processus de travail qui ont un délai d’inactivité configuré.
85 % WAS définit le délai d’inactivité sur un quart de la valeur d’origine pour tous les processus de travail qui ont un délai d’inactivité configuré.
90 WAS définit le délai d’inactivité sur un huitième de la valeur d’origine pour tous les processus de travail qui ont un délai d’inactivité configuré.
95 WAS définit le délai d’inactivité sur un seizième de la valeur d’origine pour tous les processus de travail qui ont un délai d’inactivité configuré.
100 WAS définit le délai d’inactivité sur un trente-deuxième de la valeur d’origine pour tous les processus de travail qui ont un délai d’inactivité configuré.

Activation dynamique de site

L’activation de site dynamique aide IIS à résoudre les problèmes d’extensibilité en vous permettant de différer l’activation des sites web. Lorsque le nombre de sites web est supérieur à une limite, IIS n’active aucun des sites lorsqu’il a démarré. Il ne crée pas de file d’attente et une liaison pour chaque site configuré au démarrage, comme précédemment effectué dans IIS 8.0 et versions antérieures. Au lieu de cela, il crée une file d’attente unique qui écoute les requêtes pour tous les sites et a une liaison unique. WAS charge une liste des sites, leurs liaisons, leurs applications, leurs pools d’applications et leurs paramètres de pool d’applications. Lorsqu’une requête de site arrive, IIS utilise cette liste pour créer une file d’attente et inscrire une liaison pour le site. À ce stade, HTTP.sys place la requête dans la file d'attente, WAS démarre le processus de travail et la requête est traitée.

Avec une activation de site dynamique, le service IIS démarrera probablement plus rapidement et consommera moins de mémoire. IIS doit également prendre beaucoup moins de temps pour redémarrer, car il n’est pas nécessaire de libérer toutes les files d’attente et liaisons inscrites avec HTTP. L’activation dans ce contexte fait référence à un processus par lequel IIS inscrit un site avec la pile de protocoles HTTP (HTTP.sys). Cette activation n’est pas la même que la création d’un processus de travail, qui a lieu uniquement lorsqu’une requête pour un site est reçue.

L’activation de site dynamique est activée lorsque le nombre de sites gérés par un serveur est supérieur à une limite prédéfinie. Par défaut, cette limite est 100. Si vous ne modifiez pas cette valeur, un site est activé dynamiquement sur un serveur qui héberge plus de 100 sites. Pour 100 sites ou moins, d’autre part, tous les sites seront activés au démarrage. Vous pouvez modifier cette limite en modifiant l’attribut dynamicRegistrationThreshold. Notez que le gain de performances d’un serveur avec un nombre inférieur de sites sera inférieur à celui des sites beaucoup plus élevés.

Remarque

Lorsque l’activation de site dynamique est activée, les utilisateurs ne sont pas autorisés à utiliser une adresse IP pour envoyer une requête web. Par exemple, si les utilisateurs essayent d’accéder à HTTP://127.0.0.1, ils recevront une erreur 400 requête incorrecte.

Compatibilité

Version Notes
IIS 10.0 L’élément <webLimits> n’a pas été modifié dans IIS 10.0.
IIS 8.5 L’attribut dynamicRegistrationThreshold a été ajouté dans IIS 8.5.
IIS 8.0 L’élément <webLimits> n’a pas été modifié dans IIS 8.0.
IIS 7.5 L’élément <webLimits> n’a pas été modifié dans IIS 7.5.
IIS 7.0 L’élément <webLimits> a été introduit dans IIS 7.0.
IIS 6.0 L’élément <webLimits> remplace les paramètres de métabase IIS 6.0 suivants :
  • ConnectionTimeout
  • HeaderWaitTimeout
  • MaxGlobalBandwidth
  • MinFileBytesPerSec

Programme d’installation

L’élément <webLimits> est inclus dans l’installation par défaut d’IIS 7.

Procédure

Comment configurer la limite basse de l’activation de site dynamique

  1. Ouvrez le Gestionnaire des services Internet (IIS) :

    • Si vous utilisez Windows Server 2012 R2 :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, cliquez sur Outils, puis sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows 8.1 :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
  2. Dans le volet Connexions, sélectionnez le serveur, puis double-cliquez sur Éditeur de configuration dans la zone Gestion.

  3. Dans l’Éditeur de configuration, pour la Section, développez system.applicationHost, puis sélectionnez webLimits.

  4. Entrez une valeur pour dynamicRegistrationThreshold.

  5. Dans le volet Actions, cliquez sur Appliquer.

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

Configuration

Attributs

Attribut Description
connectionTimeout Attribut timeSpan facultatif.

Spécifie le temps attendu par IIS avant de déconnecter une connexion considérée comme inactive.

La valeur par défaut est 00:02:00.
demandStartThreshold Attribut uint facultatif.

Spécifie le nombre maximal de processus de travail autorisés à s’exécuter simultanément sur un serveur web. Vous pouvez utiliser cette propriété pour empêcher les serveurs IIS de ne plus répondre lorsque trop de processus de travail ont été démarrés.

La valeur par défaut est 2147483647.
dynamicIdleThreshold Attribut uint facultatif.

Spécifie le pourcentage de RAM physique dédiée. L’intervalle entier valide est compris entre 0 et 10000. WAS utilise cette valeur de seuil pour raccourcir dynamiquement le délai d’inactivité des processus de travail. Pour plus d'informations, consultez la section Notes.

La valeur par défaut est 0.
dynamicRegistrationThreshold Attribut uint facultatif.

Spécifie la limite basse de l’activation de site dynamique. Lorsque le nombre de sites web configurés sur un serveur dépasse la valeur de cet attribut, le service n’active aucun des sites lorsqu’il a démarré. Au lieu de cela, IIS active chaque site à réception de la première requête concernant le site. Lorsque le nombre de sites configurés est inférieur ou égal à ce nombre, tous les sites web configurés seront activés lorsque le site a démarré.

La quantité de ressources système requises par IIS est réduite lorsque les sites sont activés individuellement, en particulier si un grand nombre de sites est rarement consulté. La première requête adressée au site peut prendre plus de temps au fur et à mesure que le site est activé, mais les accès suivants répondent normalement.

La valeur par défaut est 100.
headerWaitTimeout Attribut timeSpan facultatif.

Spécifie la durée pendant laquelle le serveur attend pour tous les en-têtes HTTP pour que la requête soit reçue avant de déconnecter le client. L’objectif de cet attribut est d’empêcher une variante commune de l’attaque par déni de service (DoS) qui tente de limiter au maximum les limites de connexion et de maintenir ces connexions connectées.

La valeur par défaut est 00:00:00.
maxGlobalBandWidth Attribut uint facultatif.

Spécifie la bande passante totale maximale pour le serveur. La définition de la valeur sur 0 active la bande passante illimitée pour le serveur.

La valeur par défaut est 4294967295.
minBytesPerSecond Attribut uint facultatif.

Spécifie le taux de débit minimal, en octets, que HTTP.sys applique lorsqu’il envoie une réponse au client. L’attribut minBytesPerSecond empêche les clients logiciels malveillants ou défectueux d’utiliser des ressources en maintenant une connexion ouverte avec des données minimales. Si le taux de débit est inférieur à au paramètre minBytesPerSecond, la connexion est arrêtée.

L’implémentation actuelle termine uniquement la connexion après le temps nécessaire pour diffuser en continu la réponse entière vers le client de connexion au débit minimal de transfert de bande passante. Si le taux de transfert est inférieur à la valeur spécifiée par minBytesPerSecond seulement pendant une petite période, mais que le taux de transfert global est plus élevé, la connexion n’est pas arrêtée.

La valeur par défaut est 240.

Éléments enfants

Aucune.

Exemple Configuration

L’exemple de configuration suivant définit le délai d'expiration de la connexion à 1 minute, le pourcentage de RAM physique dédiée à 150, le délai d'expiration de l’en-tête à 30 secondes et le taux minimal de débit autorisé à 500 octets par seconde.

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

Exemple de code

Les exemples de code suivants définissent le délai d'expiration de la connexion à 1 minute, le pourcentage de RAM physique dédiée à 150, le délai d'expiration de l’en-tête à 30 secondes et le taux minimal de débit autorisé à 500 octets par seconde.

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

Remarque

Vous devez veiller à définir le paramètre commit sur apphost quand vous utilisez AppCmd.exe pour configurer ces paramètres. Cela valide les paramètres de configuration dans la section d’emplacement appropriée dans le fichier 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()