В процессе централизованной раздачи клиентам System Center 2012 R2 Configuration Manager (SCCM) очередной порции обновлений с сервера с ролью Software Update Point (SUP)столкнулись с ситуацией пиковой загрузки на канале передачи данных - участка с низкой пропускной способностью на канале между структурными подразделениями и площадкой, на которой был расположен сервер SCCM. По графику отдачи трафика на сервере SCCM было хорошо видно, что исходящий трафик “упёрся” в границу того самого “узкого места на канале. Разумеется таких ситуаций чаще всего можно избежать заранее настраивая приоритизацию трафика на разных уровнях, начиная с сетевого оборудования. Но что делать, если по какой-то причине проблема возникла прямо здесь и прямо сейчас, а доступа к сетевому оборудованию нет. То есть фактически нужно как-то оперативно “задушить” трафик отдачи обновлений Windows Update на определённый момент времени средствами Windows. Простое и эффективное решение подсказал автор заметки Ограничиваем аппетиты WSUS-а.
В качестве решения предлагается ограничение общей пропускной способности (в байтах) веб-сервера IIS. За это отвечает параметр maxGlobalBandwidth в разделе конфигурации IIS -system.applicationHost/webLimits.
Чтобы запросить текущие значения параметров в указанном разделе конфигурации IIS с помощью утилиты командной строки appcmd.exe выполним:
cd /d %Windir%\system32\inetsrv\ appcmd.exe list config /section:webLimits /config:*
В полученном ответе мы увидим, что значение по умолчанию для интересующего нас параметра параметра – 4294967295:
<system.applicationHost> <webLimits maxGlobalBandwidth="4294967295" connectionTimeout="00:02:00" demandStartThreshold="2147483647" dynamicIdleThreshold="0" headerWaitTimeout="00:00:00" minBytesPerSecond="240" dynamicRegistrationThreshold="100" /> </system.applicationHost>
Предположим, нам нужно уменьшить полосу пропускания трафика IIS до 20 Mbit/s. Рассчитаем необходимое значение параметра в байтах: (20 * 1024 * 1024)/8 = 2 621 440 байт.
Выполним команду установки рассчитанного значения:
cd /d %Windir%\system32\inetsrv\ appcmd.exe set config -section:system.applicationHost/webLimits /maxGlobalBandwidth:"2621440" /commit:apphost
В ответ получим сообщение об успешном применении параметра конфигурации:
Applied configuration changes to section "system.applicationHost/webLimits" for "MACHINE/WEBROOT/APPHOST" at configuration commit path "MACHINE/WEBROOT/APPHOST"
Туже самую настройку можно выполнить и через консоль IIS Manager, перейдя на уровне веб-сервера в раздел Management > Configuration Editor
В поле Section из выпадающего дерева элементов конфигурации выберем system.applicationHost/webLimits, зададим значение интересующего нас параметра maxGlobalBandwidth и нажмём в правом меню действий Apply, чтобы изменения вступили в силу.
Результат сможем наблюдать сразу же. В нашем случае с настройками IIS по умолчанию отдача трафика клиентам была на пределе возможностей “узкого места” в сети, что вызывало ряд вытекающих проблем для пользователей находящихся в “задушенном” сегменте сети.
Сразу после применения рассчитанного нами параметра ситуация изменилась на глазах…
Таким образом критическая ситуация загрузки канала была ликвидирована.
У такого подхода к ограничению трафика в отличии от классического использования QoS есть преимущество в том, что в случае необходимости изменения пропускной способности по какому-то заданному расписанию, можно прибегнуть к помощи планировщика заданий Windows, запуская из него в нужное время вышеприведённую команду настройки IIS.
Дополнительные источники информации:
IIS.NET - Configuration Reference - system.applicationHost - webLimits
Stackoverflow.com - IIS7: limit traffic for the server
Так получается все сегменты сети зарезаются по скорости.
А можно же было только на клиентах, где медленный канал в настройках БИТСа выставить ограничения.
К чему эти костыли?
битс ограничивают скорость на СКАЧИВАНИЕ, не?
а цель - ограничить ИСХОДЯЩИЙ трафик с конкретного хоста