Важливою функцією будь-якого веб-сервера є можливість обмеження використання процесорних ресурсів 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, але не для резервування процесорних потужностей для веб-додатки.