Límites web <webLimits>
Información general
El elemento <webLimits>
especifica los límites de ancho de banda y conexiones TCP/IP.
Cada 60 segundos, un proceso de trabajo comprueba cuánto tiempo ha estado inactivo. Si su tiempo de inactividad actual es mayor que el valor de tiempo de espera de inactividad especificado por el Servicio de activación de procesos de Windows (WAS), el proceso de trabajo inicia un apagado. Al especificar un valor distinto de cero para el atributo dynamicIdleThreshold, WAS reducirá dinámicamente este tiempo de espera de inactividad en función de la cantidad de RAM utilizada.
El atributo dynamicIdleThreshold representa la cantidad de RAM física confirmada. Por ejemplo, si el servidor tiene instalados 2 gigabytes (GB) de memoria física y establece el atributo dynamicIdleThreshold en 200, ha confirmado el 200 % (4 GB) de RAM física para su uso. De acuerdo con la siguiente tabla, cuando se asigne el 80 por ciento de 4 GB, es decir, el 160 por ciento (3,2 GB) de la RAM física, WAS empezará a reducir el tiempo de inactividad de todos los procesos de trabajo en un 50 por ciento.
En la tabla siguiente se enumeran las reducciones de tiempo de espera de inactividad que se producen en porcentajes predeterminados del valor dynamicIdleThreshold.
Dynamic idle threshold percentage reached |
Dynamic idle time-out reduction |
---|---|
75 o inferior | WAS usa la configuración original del tiempo de espera de inactividad. |
80 | WAS establece el tiempo de espera de inactividad en la mitad del valor original para todos los procesos de trabajo que tienen un tiempo de espera de inactividad configurado. |
85 | WAS establece el tiempo de espera de inactividad en un cuarto del valor original para todos los procesos de trabajo que tienen un tiempo de espera de inactividad configurado. |
90 | WAS establece el tiempo de espera de inactividad en un octavo del valor original para todos los procesos de trabajo que tienen un tiempo de espera de inactividad configurado. |
95 | WAS establece el tiempo de espera de inactividad en una dieciseisava parte del valor original para todos los procesos de trabajo que tengan un tiempo de espera de inactividad configurado. |
100 | WAS establece el tiempo de espera de inactividad en una treintaidosava parte del valor original para todos los procesos de trabajo que tengan un tiempo de espera de inactividad configurado. |
Activación dinámica del sitio
La activación dinámica del sitio ayuda a IIS a solucionar problemas de escalabilidad al permitirle aplazar la activación de sitios web. Cuando el número de sitios web es mayor que un límite, IIS no activará ninguno de los sitios cuando se inicie el servicio. No creará una cola ni un enlace para cada sitio configurado al iniciarse, como se hizo anteriormente en IIS 8.0 y versiones anteriores. En su lugar, crea una sola cola que escucha las solicitudes de todos los sitios y tiene un único enlace. WAS carga una lista de los sitios, sus enlaces, sus aplicaciones, sus grupos de aplicaciones y su configuración del grupo de aplicaciones. Cuando llega una solicitud de un sitio, IIS usa esa lista para crear una cola y registrar un enlace para el sitio. En ese momento, HTTP.sys coloca la solicitud en la cola, WAS inicia el proceso de trabajo y la solicitud se procesa.
Con la activación dinámica del sitio, es probable que el servicio IIS se inicie más rápidamente y consuma menos memoria. IIS también debe tardar menos tiempo en reiniciarse, ya que no será necesario liberar todas las colas y enlaces registrados con HTTP. Por "activación", en este contexto, se entiende un proceso en el que IIS registra un sitio en la pila de protocolos HTTP (HTTP.sys). Esta activación no es la misma que la creación de un proceso de trabajo, que solo se produce cuando se recibe una solicitud de un sitio.
La activación dinámica del sitio se habilita cuando el número de sitios administrados por un servidor es mayor que un límite establecido previamente. El límite predeterminado es 100. Si no cambia ese valor, un sitio se activará dinámicamente en un servidor que hospede más de 100 sitios. Por otro lado, para 100 o menos sitios, todos los sitios se activarán al iniciarse. Puede cambiar ese límite cambiando el atributo dynamicRegistrationThreshold. Tenga en cuenta que la ganancia de rendimiento de un servidor con un número inferior de sitios será menor que con mucho más sitios.
Nota:
Cuando la activación dinámica del sitio está habilitada, los usuarios no pueden usar una dirección IP para enviar una solicitud web. Por ejemplo, si los usuarios intentan ir a HTTP://127.0.0.1, recibirán un error de solicitud incorrecta 400.
Compatibilidad
Versión | Notas |
---|---|
IIS 10.0 | El elemento <webLimits> no se modificó en IIS 10.0. |
IIS 8.5 | El atributo dynamicRegistrationThreshold se agregó en IIS 8.5. |
IIS 8.0 | El elemento <webLimits> no se modificó en IIS 8.0. |
IIS 7.5 | El elemento <webLimits> no se modificó en IIS 7.5. |
IIS 7.0 | El elemento <webLimits> se introdujo en IIS 7.0. |
IIS 6,0 | El elemento <webLimits> reemplaza la siguiente configuración de metabase de IIS 6.0:
|
Configuración
El elemento <webLimits>
se incluye en la instalación predeterminada de IIS 7.
Procedimientos
Configuración del límite inferior de activación dinámica del sitio
Abra el Administrador de Internet Information Services (IIS):
Si usa Windows Server 2012 R2:
- En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, a continuación, en Administrador de Internet Information Services (IIS).
Si usa Windows 8.1:
- Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
- En Panel de control, haga clic en Herramientas administrativas y, a continuación, haga doble clic en Administrador de Internet Information Services (IIS).
En el panel Conexiones, seleccione el servidor y, después, haga doble clic en Editor de configuración en el área Administración.
En el Editor de configuración, para la Sección, expanda
system.applicationHost
y, después, seleccione webLimits.Escriba un valor para dynamicRegistrationThreshold.
En el panel Acción, haga clic en Aplicar.
Configuración
Atributos
Atributo | Descripción |
---|---|
connectionTimeout |
Atributo timeSpan opcional. Especifica el tiempo que IIS espera antes de desconectar una conexión considerada inactiva. El valor predeterminado es 00:02:00 . |
demandStartThreshold |
Atributo uint opcional. Especifica el número máximo de procesos de trabajo que se pueden ejecutar simultáneamente en un servidor web. Puede usar esta propiedad para evitar que los servidores IIS no respondan cuando se hayan iniciado demasiados procesos de trabajo. El valor predeterminado es 2147483647 . |
dynamicIdleThreshold |
Atributo uint opcional. Especifica el porcentaje de RAM física confirmada. El intervalo entero válido va de 0 a 10000. WAS usa este valor de umbral para acortar dinámicamente el tiempo de espera de inactividad de los procesos de trabajo. Para obtener más información, vea la sección Comentarios. El valor predeterminado es 0 . |
dynamicRegistrationThreshold |
Atributo uint opcional. Especifica el límite inferior de activación dinámica del sitio. Cuando el número de sitios web configurados en un servidor supera el valor de este atributo, el servicio no activará todos los sitios cuando se inicie el servicio. En su lugar, IIS activará cada sitio cuando reciba la primera solicitud del sitio. Cuando el número de sitios configurados es menor o igual que este número, todos los sitios web configurados se activarán cuando se inicie el servicio. La cantidad de recursos del sistema requeridos por IIS es menor cuando los sitios se activan individualmente, especialmente si se accede a un gran número de sitios con poca frecuencia. La primera solicitud al sitio puede tardar más tiempo hasta que el sitio se active, pero los accesos posteriores responderán con normalidad. El valor predeterminado es 100 . |
headerWaitTimeout |
Atributo timeSpan opcional. Especifica el tiempo que el servidor espera a que se reciban todos los encabezados HTTP de la solicitud antes de desconectar el cliente. La finalidad de este atributo es ayudar a evitar una variante común del ataque por denegación de servicio (DoS) que intenta maximizar los límites de conexión y mantener esas conexiones conectadas. El valor predeterminado es 00:00:00 . |
maxGlobalBandWidth |
Atributo uint opcional. Especifica el ancho de banda total máximo para el servidor. Si se establece el valor en 0, se habilita el ancho de banda ilimitado para el servidor. El valor predeterminado es 4294967295 . |
minBytesPerSecond |
Atributo uint opcional. Especifica la velocidad de rendimiento mínima, en bytes, que HTTP.sys aplica cuando envía una respuesta al cliente. El atributo minBytesPerSecond impide que los clientes de software malintencionados o que no funcionen correctamente usen recursos manteniendo abierta una conexión con datos mínimos. Si la velocidad de rendimiento es inferior a la configuración de minBytesPerSecond, se finaliza la conexión. La implementación actual solo finaliza la conexión después del tiempo que habría tardado en transmitir toda la respuesta al cliente de conexión con la velocidad mínima de transferencia de ancho de banda transcurrido. Si la velocidad de transferencia va por debajo del valor especificado por minBytesPerSecond solo durante un pequeño período de tiempo, pero la velocidad de transferencia global es mayor, la conexión no se finalizará. El valor predeterminado es 240 . |
Elementos secundarios
Ninguno.
Ejemplo de configuración
En el ejemplo de configuración siguiente se establece el tiempo de espera de conexión en 1 minuto, el porcentaje de RAM física confirmada en 150, el tiempo de espera del encabezado en 30 segundos y la velocidad de rendimiento mínima permitida en 500 bytes por segundo.
<configuration>
<system.applicationHost>
<webLimits connectionTimeout="00:01:00"
dynamicIdleThreshold="150"
headerWaitTimeout="00:00:30"
minBytesPerSecond="500"
/>
</system.applicationHost>
</configuration>
Código de ejemplo
En los ejemplos de código siguientes se establece el tiempo de espera de conexión en 1 minuto, el porcentaje de RAM física confirmada en 150, el tiempo de espera del encabezado en 30 segundos y la velocidad de rendimiento mínima permitida en 500 bytes por segundo.
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:
Debe asegurarse de establecer el parámetrocommit en apphost
cuando use AppCmd.exe para configurar estos valores. Esto confirma los valores de configuración en la sección de ubicación adecuada del archivo 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()