Condividi tramite


Web Limits <webLimits>

Panoramica

L'elemento <webLimits> specifica limiti di connessione TCP/IP e larghezza di banda.

Ogni 60 secondi, un processo di lavoro verifica la durata dell'inattività. Se il tempo di inattività corrente è maggiore del valore di timeout inattivo specificato dal servizio attivazione processo di Windows (WAS), il processo di lavoro avvia un arresto. Quando si specifica un valore diverso da zero per l'attributo dynamicIdleThreshold , WAS ridurrà dinamicamente questo timeout di inattività a seconda della quantità di RAM usata.

L'attributo dynamicIdleThreshold rappresenta la quantità di RAM fisica di commit. Ad esempio, se il server ha 2 gigabyte (GB) di memoria fisica installata e si imposta il valore dell'attributo dynamicIdleThreshold su 200, è stato eseguito il commit del 200% (4 GB) di RAM fisica per l'uso. Secondo la tabella seguente, quando il 80% di 4 GB, ovvero il 160% (3,2 GB) di RAM fisica viene allocato, WAS inizierà a ridurre il timeout inattivo di tutti i processi di lavoro entro il 50%.

Nella tabella seguente sono elencate le riduzioni di timeout inattive che si verificano a percentuali predeterminate del valore dynamicIdleThreshold .

Dynamic idle threshold percentage reached Dynamic idle time-out reduction
75 o inferiore WAS usa le impostazioni di timeout inattive originali.
80 WAS imposta il timeout inattivo su una metà del valore originale per tutti i processi di lavoro che hanno un timeout di inattività configurato.
85 WAS imposta il timeout inattivo su un quarto del valore originale per tutti i processi di lavoro che hanno un timeout di inattività configurato.
90 WAS imposta il timeout inattivo su un ottavo del valore originale per tutti i processi di lavoro che hanno un timeout di inattività configurato.
95 WAS imposta il timeout inattivo su un sedicesimo del valore originale per tutti i processi di lavoro che hanno un timeout di inattività configurato.
100 WAS imposta il timeout inattivo su un trenta secondi del valore originale per tutti i processi di lavoro che hanno un timeout di inattività configurato.

Attivazione dinamica del sito

L'attivazione dinamica del sito consente a IIS di risolvere i problemi di scalabilità consentendo di rinviare l'attivazione dei siti Web. Quando il numero di siti Web è maggiore di un limite, IIS non attiverà nessuno dei siti all'avvio del servizio. Non creerà una coda e un'associazione per ogni sito configurato all'avvio, come è stato fatto in precedenza in IIS 8.0 e versioni precedenti. Crea invece una singola coda che ascolta le richieste per tutti i siti e ha un'unica associazione. WAS carica un elenco dei siti, i relativi binding, le relative applicazioni, i pool di applicazioni e le impostazioni del pool di applicazioni. Quando arriva una richiesta per un sito, IIS usa tale elenco per creare una coda e registrare un'associazione per il sito. A quel punto, HTTP.sys inserisce la richiesta nella coda, WAS avvia il processo di lavoro e la richiesta viene elaborata.

Con l'attivazione dinamica del sito, il servizio IIS probabilmente inizierà più rapidamente e utilizzerà meno memoria. IIS deve anche richiedere meno tempo per riavviare perché non sarà necessario rilasciare tutte le code e le associazioni registrate con HTTP. L'attivazione in questo contesto fa riferimento a un processo in cui IIS registra un sito con lo stack di protocolli HTTP (HTTP.sys). Questa attivazione non corrisponde alla creazione di un processo di lavoro, che avviene solo quando viene ricevuta una richiesta per un sito.

L'attivazione dinamica del sito è abilitata quando il numero di siti gestiti da un server è maggiore di un limite pre-impostato. Per impostazione predefinita, tale limite è 100. Se non si modifica tale valore, un sito verrà attivato dinamicamente in un server che ospita più di 100 siti. Per 100 o meno siti, invece, tutti i siti verranno attivati all'avvio. È possibile modificare tale limite modificando l'attributo dynamicRegistrationThreshold. Si noti che il miglioramento delle prestazioni per un server con un numero inferiore di siti sarà minore di quello con più siti.

Nota

Quando l'attivazione dinamica del sito è abilitata, gli utenti non possono usare un indirizzo IP per inviare una richiesta Web. Ad esempio, se gli utenti tentano di passare a HTTP://127.0.0.1, riceveranno un errore di richiesta non valida 400.

Compatibilità

Versione Note
IIS 10.0 L'elemento <webLimits> non è stato modificato in IIS 10.0.
IIS 8,5 L'attributo dynamicRegistrationThreshold è stato aggiunto in IIS 8.5.
IIS 8,0 L'elemento <webLimits> non è stato modificato in IIS 8.0.
IIS 7,5 L'elemento <webLimits> non è stato modificato in IIS 7.5.
IIS 7.0 L'elemento <webLimits> è stato introdotto in IIS 7.0.
IIS 6.0 L'elemento <webLimits> sostituisce le impostazioni metabase di IIS 6.0 seguenti:
  • ConnectionTimeout
  • HeaderWaitTimeout
  • MaxGlobalBandwidth
  • MinFileBytesPerSec

Installazione

L'elemento <webLimits> è incluso nell'installazione predefinita di IIS 7 e versioni successive.

Procedure

Come configurare il limite inferiore di attivazione del sito dinamico

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 R2:

      • Nella barra delle applicazioni fare clic su Server Manager, scegliere Strumenti e quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows 8.1:

      • Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
      • Fare clic su Strumenti di amministrazione e quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni selezionare il server e quindi fare doppio clic su Editor di configurazione nell'area Gestione .

  3. Nell'editor di configurazione, per la sezione espandere system.applicationHoste quindi selezionare WebLimits.

  4. Immettere un valore per dynamicRegistrationThreshold.

  5. Nel riquadro Azione fare clic su Applica.

    Screenshot che mostra come configurare l'attivazione dinamica del sito usando l'editor di configurazione.

Configurazione

Attributi

Attributo Descrizione
connectionTimeout Attributo timeSpan facoltativo.

Specifica l'ora in cui IIS attende prima di disconnettere una connessione considerata inattiva.

Il valore predefinito è 00:02:00.
demandStartThreshold Attributo uint facoltativo.

Specifica il numero massimo di processi di lavoro consentiti per l'esecuzione simultanea in un server Web. È possibile usare questa proprietà per impedire che i server IIS diventino non rispondenti quando sono stati avviati troppi processi di lavoro.

Il valore predefinito è 2147483647.
dynamicIdleThreshold Attributo uint facoltativo.

Specifica la percentuale di RAM fisica con commit. L'intervallo intero valido è compreso tra 0 e 10000. WAS usa questo valore soglia per ridurre dinamicamente il timeout di inattività dei processi di lavoro. Per altre informazioni, vedere la sezione Osservazioni.

Il valore predefinito è 0.
dynamicRegistrationThreshold Attributo uint facoltativo.

Specifica il limite inferiore di attivazione del sito dinamico. Quando il numero di siti Web configurati in un server supera il valore di questo attributo, il servizio non attiverà tutti i siti all'avvio del servizio. IIS attiva invece ogni sito quando riceve la prima richiesta per il sito. Quando il numero di siti configurati è minore o uguale a questo numero, tutti i siti Web configurati verranno attivati al momento dell'avvio del servizio.

La quantità di risorse di sistema richieste da IIS è inferiore quando i siti vengono attivati singolarmente, soprattutto se un numero elevato di siti è accessibile raramente. La prima richiesta al sito potrebbe richiedere più tempo perché il sito viene attivato, ma gli accessi successivi risponderanno normalmente.

Il valore predefinito è 100.
headerWaitTimeout Attributo timeSpan facoltativo.

Specifica il momento in cui il server attende che tutte le intestazioni HTTP vengano ricevute prima di disconnettere il client. Lo scopo di questo attributo consiste nel impedire una variante comune dell'attacco Denial of Service (DoS) che tenta di limitare al massimo i limiti di connessione e mantenere connesse tali connessioni.

Il valore predefinito è 00:00:00.
maxGlobalBandWidth Attributo uint facoltativo.

Specifica la larghezza di banda totale massima per il server. L'impostazione del valore su 0 consente la larghezza di banda illimitata per il server.

Il valore predefinito è 4294967295.
minBytesPerSecond Attributo uint facoltativo.

Specifica la velocità effettiva minima, in byte, che HTTP.sys impone quando invia una risposta al client. L'attributo minBytesPerSecond impedisce ai client software dannosi o non funzionanti di usare le risorse tenendo aperta una connessione con dati minimi. Se la velocità effettiva è inferiore all'impostazione minBytesPerSecond , la connessione viene terminata.

L'implementazione corrente termina solo la connessione dopo il tempo necessario per trasmettere l'intera risposta al client di connessione alla velocità minima di trasferimento della larghezza di banda trascorsa. Se la velocità di trasferimento è inferiore al valore specificato da minBytesPerSecond solo per un piccolo periodo di tempo, ma la velocità di trasferimento complessiva è superiore, la connessione non verrà terminata.

Il valore predefinito è 240.

Elementi figlio

Nessuno.

Esempio di configurazione

L'esempio di configurazione seguente imposta il timeout della connessione su 1 minuto, la percentuale di RAM fisica con commit su 150, il timeout dell'intestazione su 30 secondi e la velocità effettiva minima consentita a 500 byte al secondo.

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

Codice di esempio

Gli esempi di codice seguenti impostano il timeout della connessione su 1 minuto, la percentuale di RAM fisica con commit su 150, il timeout dell'intestazione su 30 secondi e la velocità effettiva minima consentita a 500 byte al secondo.

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

Nota

È necessario assicurarsi di impostare il parametro commit su apphost quando si usa AppCmd.exe per configurare queste impostazioni. Questa operazione esegue il commit delle impostazioni di configurazione nella sezione percorso appropriata nel file di 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()