Веб-ограничения <webLimits>

Общие сведения

Элемент <webLimits> задает tcp/IP-подключение и ограничения пропускной способности.

Каждые 60 секунд рабочий процесс проверяет, как долго он простаивали. Если текущее время простоя больше значения времени ожидания простоя, указанного службой активации windows (WAS), рабочий процесс инициирует завершение работы. Если указать ненулевое значение для атрибута dynamicIdleThreshold , WAS динамически сокращает время ожидания простоя в зависимости от используемого объема ОЗУ.

Атрибут dynamicIdleThreshold представляет объем зафиксированного физического ОЗУ. Например, если на сервере установлено 2 гигабайта (ГБ) физической памяти и задано значение атрибута dynamicIdleThreshold равным 200, вы задали 200 процентов (4 ГБ) физической ОЗУ для использования. Согласно следующей таблице, при выделении 80 процентов из 4 ГБ, т. е. 160 процентов (3,2 ГБ) физической ОЗУ, WAS начнет сокращать время ожидания бездействия для всех рабочих процессов на 50 процентов.

В следующей таблице перечислены сокращения времени ожидания простоя, которые происходят в предопределенных процентах от значения dynamicIdleThreshold .

Dynamic idle threshold percentage reached Dynamic idle time-out reduction
75 или ниже WAS использует исходные параметры времени ожидания простоя.
80 WAS устанавливает время ожидания простоя в половину исходного значения для всех рабочих процессов, для которых настроено время ожидания простоя.
85 WAS устанавливает время ожидания простоя в одну четвертую от исходного значения для всех рабочих процессов, имеющих настроенное время ожидания простоя.
90 WAS устанавливает время ожидания простоя в одну восьмую исходного значения для всех рабочих процессов, для которых настроено время ожидания простоя.
95 WAS устанавливает время ожидания простоя в одну шестнадцатую от исходного значения для всех рабочих процессов, имеющих настроенное время ожидания простоя.
100 WAS устанавливает время ожидания простоя в одну тридцать секунду от исходного значения для всех рабочих процессов, имеющих настроенное время ожидания простоя.

Динамическая активация сайта

Динамическая активация сайта помогает IIS устранять проблемы масштабируемости, позволяя отложить активацию веб-сайтов. Если количество веб-сайтов превышает ограничение, службы IIS не активируют ни один из сайтов при запуске службы. Он не создает очередь и привязку для каждого настроенного сайта при запуске, как это было сделано ранее в IIS 8.0 и более ранних версиях. Вместо этого создается одна очередь, которая прослушивает запросы для всех сайтов и имеет одну привязку. WAS загружает список сайтов, их привязок, приложений, пулов приложений и параметров пула приложений. Когда поступает запрос на сайт, СЛУЖБЫ IIS используют этот список для создания очереди и регистрации привязки для сайта. На этом этапе, HTTP.sys помещает запрос в очередь, WAS запускает рабочий процесс, и запрос обрабатывается.

При динамической активации сайта служба IIS, скорее всего, запустится быстрее и будет потреблять меньше памяти. Для перезапуска IIS также требуется заметно меньше времени, так как не потребуется освобождать все зарегистрированные очереди и привязки с помощью HTTP. Активация в этом контексте относится к процессу, в котором СЛУЖБЫ IIS регистрируют сайт с помощью стека протоколов HTTP (HTTP.sys). Эта активация отличается от создания рабочего процесса, который происходит только при получении запроса на сайт.

Динамическая активация сайта включается, если количество сайтов, обрабатываемых сервером, превышает предварительно заданное ограничение. По умолчанию это ограничение равно 100. Если не изменить это значение, сайт будет динамически активирован на сервере, на котором размещено более 100 сайтов. Для 100 или менее сайтов, с другой стороны, все сайты будут активированы при запуске. Это ограничение можно изменить, изменив атрибут dynamicRegistrationThreshold. Обратите внимание, что повышение производительности для сервера с меньшим количеством сайтов будет меньше, чем при значительно большем количестве сайтов.

Примечание

Если включена динамическая активация сайта, пользователям не разрешено использовать IP-адрес для отправки веб-запроса. Например, если пользователи попытаются перейти по HTTP://127.0.0.1папке , они получат сообщение об ошибке 400 Bad Request Error.

Совместимость

Версия Примечания
IIS 10.0 Элемент <webLimits> не был изменен в IIS 10.0.
IIS 8,5 Атрибут dynamicRegistrationThreshold был добавлен в IIS 8.5.
IIS 8,0 Элемент <webLimits> не был изменен в IIS 8.0.
IIS 7,5 Элемент <webLimits> не был изменен в IIS 7.5.
IIS 7.0 Элемент <webLimits> появился в IIS 7.0.
IIS 6,0 Элемент <webLimits> заменяет следующие параметры метабазы IIS 6.0:
  • ConnectionTimeout
  • HeaderWaitTimeout
  • MaxGlobalBandwidth
  • MinFileBytesPerSec

Настройка

Элемент <webLimits> включен в установку iis 7 и более поздних версий по умолчанию.

Инструкции

Настройка нижнего предела динамической активации сайта

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 R2:

      • На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
    • Если вы используете Windows 8.1:

      • Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
      • Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
  2. В области Подключения выберите сервер и дважды щелкните редактор конфигурации в области Управление .

  3. В редакторе конфигурации для раздела разверните и system.applicationHostвыберите webLimits.

  4. Введите значение dynamicRegistrationThreshold.

  5. В области Действие нажмите кнопку Применить.

    Снимок экрана: настройка динамической активации сайта с помощью редактора конфигурации.

Конфигурация

Атрибуты

Атрибут Описание
connectionTimeout Необязательный атрибут timeSpan.

Указывает время ожидания служб IIS перед отключением подключения, которое считается неактивным.

Значение по умолчанию — 00:02:00.
demandStartThreshold Необязательный атрибут uint.

Указывает максимальное количество рабочих процессов, которые могут выполняться одновременно на веб-сервере. Это свойство можно использовать, чтобы предотвратить отсутствие ответа на серверы IIS при запуске слишком большого количества рабочих процессов.

Значение по умолчанию — 2147483647.
dynamicIdleThreshold Необязательный атрибут uint.

Указывает процент зафиксированного физического ОЗУ. Допустимый диапазон целых чисел — от 0 до 10 000. WAS использует это пороговое значение для динамического сокращения времени ожидания простоя рабочих процессов. Дополнительные сведения см. в разделе «Примечания».

Значение по умолчанию — 0.
dynamicRegistrationThreshold Необязательный атрибут uint.

Задает нижний предел динамической активации сайта. Если количество настроенных веб-сайтов на сервере превышает значение этого атрибута, служба не активирует все сайты при запуске службы. Вместо этого СЛУЖБЫ IIS активируют каждый сайт при получении первого запроса на сайт. Если число настроенных сайтов меньше или равно этому числу, все настроенные веб-сайты будут активированы при запуске службы.

Количество системных ресурсов, необходимых службам IIS, меньше при активации сайтов по отдельности, особенно если доступ к большому количеству сайтов осуществляется редко. Первый запрос к сайту может занять больше времени по мере активации сайта, но последующие обращения будут реагировать нормально.

Значение по умолчанию — 100.
headerWaitTimeout Необязательный атрибут timeSpan.

Указывает время ожидания сервером всех заголовков HTTP для получения запроса перед отключением клиента. Цель этого атрибута — предотвратить распространенный вариант атаки типа "отказ в обслуживании" (DoS), которая пытается максимально ограничить количество подключений и сохранить эти подключения.

Значение по умолчанию — 00:00:00.
maxGlobalBandWidth Необязательный атрибут uint.

Указывает максимальную общую пропускную способность для сервера. Установка значения 0 обеспечивает неограниченную пропускную способность для сервера.

Значение по умолчанию — 4294967295.
minBytesPerSecond Необязательный атрибут uint.

Указывает минимальную пропускную способность (в байтах), которая HTTP.sys применяется при отправке ответа клиенту. Атрибут minBytesPerSecond предотвращает использование ресурсов вредоносными или неисправными программными клиентами, удерживая подключение открытым с минимальным объемом данных. Если пропускная способность ниже значения параметра minBytesPerSecond , подключение прерывается.

Текущая реализация завершает подключение только по истечении времени, необходимого для потоковой передачи всего ответа на подключающийся клиент с минимальной скоростью передачи пропускной способности. Если скорость передачи ниже значения, заданного параметром minBytesPerSecond , только в течение небольшого периода времени, но общая скорость передачи выше, подключение не будет прервано.

Значение по умолчанию — 240.

Дочерние элементы

Отсутствует.

Образец конфигурации

В следующем примере конфигурации устанавливается время ожидания подключения в 1 минуту, процент зафиксированного физического ОЗУ — 150, время ожидания заголовка — 30 секунд, а минимальная допустимая пропускная способность — 500 байт в секунду.

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

Пример кода

В следующих примерах кода устанавливается время ожидания подключения 1 минута, процент зафиксированного физического ОЗУ — 150, время ожидания заголовка — 30 секунд, а минимальная допустимая пропускная способность — 500 байт в секунду.

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

Примечание

При использовании AppCmd.exe для настройки этих параметров для параметра apphostфиксации необходимо задать значение . Это зафиксирует параметры конфигурации в соответствующем разделе расположения в файле 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()