Limites da Web <webLimits>
Visão geral
O elemento <webLimits>
especifica os limites de conexão TCP/IP e largura de banda.
A cada 60 segundos, um processo de trabalho verifica quanto tempo ficou ocioso. Se o tempo ocioso atual for maior que o valor do tempo limite ocioso especificado pelo WAS (Serviço de Ativação de Processos do Windows), o processo de trabalho iniciará um desligamento. Quando você especificar um valor diferente de zero para o atributo dynamicIdleThreshold, o WAS reduzirá dinamicamente esse tempo limite ocioso dependendo da quantidade de RAM usada.
O atributo dynamicIdleThreshold representa a quantidade de RAM física confirmada. Por exemplo, se o servidor tiver 2 gigabytes (GB) de memória física instalada e você definir o valor do atributo dynamicIdleThreshold como 200, você dedicou 200% (4 GB) da RAM física para uso. De acordo com a tabela a seguir, quando 80% de 4 GB — ou seja, 160% (3,2 GB) de RAM física — forem alocados, o WAS começará a reduzir o tempo limite ocioso de todos os processos de trabalho em 50%.
A tabela a seguir lista as reduções de tempo limite ocioso que ocorrem em porcentagens predeterminadas do valor dynamicIdleThreshold.
Dynamic idle threshold percentage reached |
Dynamic idle time-out reduction |
---|---|
75 ou menos | O WAS usa as configurações originais de tempo limite ocioso. |
80 | O WAS define o tempo limite ocioso como metade do valor original para todos os processos de trabalho que têm o tempo limite ocioso configurado. |
85 | O WAS define o tempo limite ocioso como um quarto do valor original para todos os processos de trabalho que têm o tempo limite ocioso configurado. |
90 | O WAS define o tempo limite ocioso como um oitavo do valor original para todos os processos de trabalho que têm o tempo limite ocioso configurado. |
95 | O WAS define o tempo limite ocioso como um dezesseis avos do valor original para todos os processos de trabalho que têm o tempo limite ocioso configurado. |
100 | O WAS define o tempo limite ocioso como um trinta e dois avos do valor original para todos os processos de trabalho que têm o tempo limite ocioso configurado. |
Ativação dinâmica de sites
A ativação dinâmica do site ajuda o IIS a resolver problemas de escalabilidade, permitindo que você adie a ativação de sites da Web. Quando o número de sites for maior que um limite, o IIS não ativará nenhum dos sites quando o serviço for iniciado. Ele não criará uma fila e uma associação para cada site configurado na inicialização, como foi feito anteriormente no IIS 8.0 e anterior. Em vez disso, ele cria uma única fila que escuta solicitações para todos os sites e tem uma única associação. O WAS carrega uma lista dos sites, suas associações, seus aplicativos, seus pools de aplicativos e suas configurações de pool de aplicativos. Quando uma solicitação de um site chega, o IIS usa essa lista para criar uma fila e registrar uma associação para o site. Nesse ponto, HTTP.sys coloca a solicitação na fila, WAS inicia o processo de trabalho e a solicitação é processada.
Com a ativação dinâmica do site, o serviço do IIS provavelmente começará mais rapidamente e consumirá menos memória. O IIS também deve levar muito menos tempo para ser reiniciado, pois não precisará liberar todas as filas e associações registradas com HTTP. A ativação nesse contexto refere-se a um processo no qual o IIS registra um site com a pilha de protocolo HTTP (HTTP.sys). Essa ativação não é a mesma que criar um processo de trabalho, o que só acontece quando uma solicitação de um site é recebida.
A ativação dinâmica do site é habilitada quando o número de sites manipulados por um servidor é maior que um limite predefinido. Por padrão, esse limite é 100. Se você não alterar esse valor, um site será ativado dinamicamente em um servidor que hospeda mais de 100 sites. Para 100 ou menos sites, por outro lado, todos os sites serão ativados na inicialização. Você pode alterar esse limite alterando o atributo dynamicRegistrationThreshold. Observe que o ganho de desempenho para um servidor com um número menor de sites será menor do que com significativamente mais sites.
Observação
Quando a ativação dinâmica do site está habilitada, os usuários não têm permissão para usar um endereço IP para enviar uma solicitação da Web. Por exemplo, se os usuários tentarem navegar até HTTP://127.0.0.1, eles receberão 400 erros de solicitação incorreta.
Compatibilidade
Versão | Observações |
---|---|
IIS 10.0 | O elemento <webLimits> não foi modificado no IIS 10.0. |
IIS 8.5 | O atributo dynamicRegistrationThreshold foi adicionado aos IIS 8.5. |
IIS 8.0 | O elemento <webLimits> não foi modificado no IIS 8.0. |
IIS 7.5 | O elemento <webLimits> não foi modificado no IIS 7.5. |
IIS 7.0 | O elemento <webLimits> foi introduzido no IIS 7.0. |
IIS 6,0 | O elemento <webLimits> substitui as seguintes configurações de metabase do IIS 6.0:
|
Instalação
O elemento <webLimits>
está incluído na instalação padrão do IIS 7 e versões posteriores.
Instruções
Como configurar o limite inferior da ativação dinâmica do site
Abra o Gerenciador dos Serviços de Informações da Internet (IIS):
Se você estiver usando o Windows Server 2012 R2:
- Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
Se você estiver usando o Windows 8.1:
- Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
- Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
No painel Conexões, selecione o servidor e clique duas vezes no Editor de Configuração, na área Gerenciamento.
No Editor de Configuração, para a Seção, expanda
system.applicationHost
e selecione webLimits.Insira um valor para dynamicRegistrationThreshold.
No painel Ação, clique em Aplicar.
Configuração
Atributos
Atributo | Descrição |
---|---|
connectionTimeout |
Atributo timeSpan opcional. Especifica o tempo que o IIS aguarda antes de desconectar uma conexão considerada inativa. O valor padrão é 00:02:00 . |
demandStartThreshold |
Atributo uint opcional. Especifica o número máximo de processos de trabalho que podem ser executados simultaneamente em um servidor Web. Você pode usar essa propriedade para impedir que os servidores IIS deixem de responder quando muitos processos de trabalho tiverem sido iniciados. O valor padrão é 2147483647 . |
dynamicIdleThreshold |
Atributo uint opcional. Especifica a porcentagem de RAM física confirmada. O intervalo inteiro válido é de 0 a 10000. O WAS usa esse valor de limite para reduzir dinamicamente o tempo limite ocioso dos processos de trabalho. Para obter mais informações, consulte a seção Comentários. O valor padrão é 0 . |
dynamicRegistrationThreshold |
Atributo uint opcional. Especifica o limite inferior da ativação dinâmica do site. Quando o número de sites configurados em um servidor exceder o valor desse atributo, o serviço não ativará todos os sites quando o serviço for iniciado. Em vez disso, o IIS ativa cada site quando recebe a primeira solicitação relativa a ele. Quando o número de sites configurados for menor ou igual a esse número, todos os sites configurados serão ativados quando o serviço for iniciado. A quantidade de recursos do sistema exigidos pelo IIS é menor quando os sites são ativados individualmente, especialmente se um grande número de sites é acessado com pouca frequência. Embora a primeira solicitação feita ao site possa levar mais tempo porque o site ainda está sendo ativado, os acessos seguintes respondem normalmente. O valor padrão é 100 . |
headerWaitTimeout |
Atributo timeSpan opcional. Especifica o tempo que o servidor aguarda todos os cabeçalhos HTTP para que a solicitação seja recebida antes de desconectar o cliente. A finalidade desse atributo é ajudar a evitar uma variante comum do ataque de Negação de Serviço (DoS) que tenta maximizar os limites de conexão e manter essas conexões conectadas. O valor padrão é 00:00:00 . |
maxGlobalBandWidth |
Atributo uint opcional. Especifica a largura de banda total máxima para o servidor. Definir o valor como 0 permite largura de banda ilimitada para o servidor. O valor padrão é 4294967295 . |
minBytesPerSecond |
Atributo uint opcional. Especifica a taxa de taxa de transferência mínima, em bytes, que HTTP.sys impõe quando envia uma resposta ao cliente. O atributo minBytesPerSecond impede que clientes de software mal-intencionados ou com mau funcionamento usem recursos mantendo uma conexão aberta com dados mínimos. Se a taxa de taxa de transferência for menor que a configuração minBytesPerSecond, a conexão será encerrada. A implementação atual encerra apenas a conexão após o tempo necessário para transmitir toda a resposta de volta para o cliente de conexão com a taxa mínima de transferência de largura de banda decorrido. Se a taxa de transferência ficar abaixo do valor especificado por minBytesPerSecond apenas por um pequeno período, mas a taxa de transferência geral for maior, a conexão não será encerrada. O valor padrão é 240 . |
Elementos filho
Nenhum.
Exemplo de configuração
O exemplo de configuração a seguir define o tempo limite de conexão como 1 minuto, o percentual de RAM física confirmada como 150, o tempo limite de espera do cabeçalho para 30 segundos e a taxa mínima de taxa de transferência permitido para 500 bytes por segundo.
<configuration>
<system.applicationHost>
<webLimits connectionTimeout="00:01:00"
dynamicIdleThreshold="150"
headerWaitTimeout="00:00:30"
minBytesPerSecond="500"
/>
</system.applicationHost>
</configuration>
Exemplo de código
Os exemplos de códigos a seguir definem o tempo limite de conexão como 1 minuto, o percentual de RAM física confirmada como 150, o tempo limite de espera do cabeçalho para 30 segundos e a taxa mínima de taxa de transferência permitido para 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
Observação
Defina o parâmetro commit para apphost
quando usar AppCmd.exe para definir essas configurações. Isso confirma as definições de configuração para a seção de local apropriado no arquivo 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()