Обмеження використання CPU для Application Pool в IIS 8

Важливою функцією будь-якого веб-сервера є можливість обмеження використання процесорних ресурсів CPU певним сайтом, в іншому випадку один сайт може монополізувати ресурси CPU, що може бути неприйнятним, особливо для серверів веб-хостингу, поділюваних ресурси між декількома клієнтами з різними сайтами. В IIS (Internet Information Services) 7.0 і більш ранніх версіях, була присутня можливість моніторингу використання CPU веб додатками і відключення на кілька хвилин пулу додатків, який перевищив заданий ліміт. Повноцінна можливість управління споживанням ресурсів CPU, доступних кожному пулу додатків, з'явилася тільки в IIS 8.0 (Windows Server 2012 і вище). Ця можливість називається CPU Throttling і дозволяє замість тимчасової зупинки надмірного агресивного до процесора пулу додатків, задати максимальну кількість ресурсів CPU, доступних кожному пулу IIS.

У цій статті ми покажемо, як обмежити використання CPU пулами додатків в IIS 8 (і вище) на прикладі веб-сервера на базі Windows Server 2012.

Відкрийте консоль Internet Information Services (IIS) Manager (% Systemroot% \ system32 \ inetsrv \ iis.msc), розгорніть в дереві ваш сервер і виберіть розділ Application Pools. Налаштування CPU Throttling в IIS знаходяться в розділі параметрів кожного пулу.

Порада. Щоб для кожного сайту, запущеного на IIS, можна було задати власні ліміти CPU, потрібно для кожного сайту створити власні App Pool.
  • Якщо потрібно включити обмеження для конкретного пулу, виберіть його в списку і перейдіть в розділ налаштувань Advanced Settings.
  • Якщо потрібно задати налаштування лімітів по-замовчуванню для всіх пулів, потрібно вибрати секцію Set Application Pool Defaults.

У вікні налаштувань Advanced Settings нас цікавлять параметри, що задаються в секції CPU:

  • Limit - максимальний% процесорного часу, який може використовувати пул додатків. При перевищенні цього значення, виконується дія, вказане в полі Limit. В IIS 8 відсоток задається в тисячних частках (1/1000 відсотка). Наприклад, щоб обмежити споживання CPU в 20%, в поле Limit потрібно вказати 20000. В IIS 8.5 значення вказується в звичайних відсотках. Відключити ліміт використання можна, задавши 0
  • Limit Action - дію, яке виконується з пулом при перевищенні ліміту використання CPU
  • Limit Interval (minutes) - періодичність перевірки і скинути систему завантаження при припинення робочого процесу. Цей параметр не використовується для CPU Throttling, і використовується для сумісності з попередніми версіями IIS.

Порада. Ці настройки застосовуються тільки до користувача, з-під якого запущений пул. За замовчуванням кожен пул запускається з-під свого облікового запису, таким чином, навантаження кожного пулу регулюється індивідуально. Якщо ж ви використовуєте виділену учетку для запуску декількох пулів, то настройки для них будуть ідентичними.

В поле Limit Action можна вибрати одну з таких дій, яке буде виконано при перевищенні заданого ліміту.

  • NoAction - ніяких дій не виконується, а в журнал записується подія про перевищення CPU
  • KillW3wp (Kill worker processes) - робочий процес пулу, який перевищив ліміт призупиняється на час, вказаний в полі Limit Interval. У журнал додається відповідний запис.
  • Throttle - жорстке обмеження доступних ресурсів CPUзначеніем, заданим в полі Limit. Значення поля Limit в цьому випадку ігнорується, а в журнал пишеться подія.
  • ThrottleUnderLimit - обмеження працюють тільки при високому завантаженні сервера. При наявності вільних ресурсів CPU, пул може перевищити заданий ліміт.

Налаштувати CPU Throttling можна і з командного рядка за допомогою утиліти appcmd. Наприклад, щоб для пулу DefaultAppPool встановити обмеження в 30% використання CPU, потрібно виконати команду:

% Systemroot% \ system32 \ inetsrv \ appcmd set apppool DefaultAppPool /cpu.limit:30000 /cpu.action:Throttle

Увімкнути режим батьківського контролю для всіх пулів IIS можна так:

% Systemroot% \ system32 \ inetsrv \ appcmd set config -section: system.applicationHost / applicationPools /applicationPoolDefaults.cpu.limit:10000 /cpu.action:Throttle / commit: apphost

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

Таким чином, в IIS 8 з'явилася можливість гнучкого регулювання завантаження сервера запущеними веб-додатками. Але потрібно розуміти, що CPU Throttling використовується тільки для обмеження максимального завантаження CPU, але не для резервування процесорних потужностей для веб-додатки.