Если на одном сервере размещено несколько веб-приложений, то для них может потребоваться разграничение нагрузки. CPU Throttling позволяет регулировать уровень ресурсов CPU, доступный для пула приложений IIS. Надо сказать, что возможность ограничения пула по CPU появился еще в IIS 7, однако тогда она работала следующим образом:
при достижении заданного лимита использования процессора пул приложений просто останавливался на некоторое время. Не очень красивое решение, ведь при этом приложение не ограничивается, а временно выводится из строя. Полноценная регулировки нагрузки CPU была реализована только в IIS 8, где появилась возможность ограничивать уровень нагрузки для каждого пула приложений, не останавливая его.
Настройки CPU Throttling входят в конфигурацию пула приложений и настраиваются следующим образом.
Если надо включить ограничение для одного конкретного пула приложений, то выбираем его из списка и переходим в раздел «Advanced Settings». Если же надо задать дефолтные ограничения для всех пулов, то идем в раздел «Set Application Pool Defaults».
В настройках переходим в раздел CPU, где нас интересуют следующие настройки:
• Limit — максимальный процент процессорного времени, который может использовать пул приложений. При превышении этого значения производится действие, указанное в поле Limit Action. В IIS 8 процент задается в тысячных долях процента (1\1000 of %), т.е. чтобы задать ограничение в 30% в поле Limit надо указать значение 30000. В IIS 8.5 значение задается по человечески, в процентах;
• Limit Action — действие, которые должны произойти с пулом при достижении заданного лимита нагрузки CPU;
• Limit Interval — период проверки и сброса результата мониторинга нагрузки. Этот параметр не используется при тротлинге и предназначен в основном для обеспечения совместимости с предыдущими версиями IIS.
Примечание. Настройки применяется к пользователю, от имени которого запущен пул приложений. По умолчанию каждый пул имеет уникальную учетную запись и нагрузка для каждого пула регулируется отдельно. Если вы используете специально выделенную учетную запись, под которой работают несколько пулов приложений, то для всех них настройки будут идентичны.
После установки лимита в поле Limit Action надо выбрать действие, которые должны произойти с пулом при достижении заданного лимита:
• NoAction — генерируется событие, производится запись в системный журнал. Никаких действий производиться не будет;
• KillW3wp — рабочий процесс для пула останавливается на время, указанное в поле Limit Interval. Событие записывается в системный журнал;
• Throttle — жестко ограничивает доступную для пула процессорную мощность значением, указанным в поле Limit. Limit Interval не используется и запись в журнал не производится;
• ThrottleUnderLimit — ограничение работает в том случае, если сервер сильно нагружен. При небольшой нагрузке на сервер пул может превысить ограничение. Также как и в предыдущем случае Limit Interval не используется и запись в журнал не производится.
Также настройки можно произвести с помощью консольной утилиты appcmd. Так например для включения для DefaultAppPool тротлинга при 30% нагрузке надо открыть командную строку и выполнить команду:
%systemroot%\system32\inetsrv\appcmd set apppool DefaultAppPool /cpu.limit:30000 /cpu.action:Throttle
А настроить эти значения как дефолтные для всех пулов можно командой:
%systemroot%\system32\inetsrv\appcmd set config -section:system.applicationHost/applicationPools /applicationPoolDefaults.cpu.limit:30000 /cpu.action:Throttle /commit:apphost
Таким образом можно довольно гибко регулировать процессорную нагрузку на сервер, создаваемую web-приложениями. В завершение напомню, что CPU Throttling не занимается резервированием процессорной мощности, а служит исключительно для ограничения нагрузки.