Веб-ограничения <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:
|
Настройка
Элемент <webLimits>
включен в установку iis 7 и более поздних версий по умолчанию.
Инструкции
Настройка нижнего предела динамической активации сайта
Откройте диспетчер служб IIS:
Если вы используете Windows Server 2012 R2:
- На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
Если вы используете Windows 8.1:
- Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
- Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
В области Подключения выберите сервер и дважды щелкните редактор конфигурации в области Управление .
В редакторе конфигурации для раздела разверните и
system.applicationHost
выберите webLimits.Введите значение dynamicRegistrationThreshold.
В области Действие нажмите кнопку Применить.
Конфигурация
Атрибуты
Атрибут | Описание |
---|---|
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()
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по