Webové úterý - Nastavení limitů webového serveru ve sdíleném prostředí

Ať už provozujete jeden server anebo celou farmu, můžete se setkat se spoustou situací, které budou vyžadovat pokročilejší nastavení IIS. Typicky v situaci, kdy na server máte více webů, přičemž několik z nich provozuje někdo jiný – kamarád, kolega, jiná firma, programátor nebo někdo z rodiny. V takovém případě de facto řešíte sdílený hosting, protože se o systémové prostředky dělí několikero aplikací.

Na takovém hostingu bývá většinou hostováno několik desítek, stovek nebo i tisíců webů či aplikací. Každá z nich je de facto procesem, který využívá systémové prostředky serveru. Především paměť a procesor. Nezřídka může dojít k tomu, že jeden z webů vyčerpá všechnu paměť přidělenou celému webovému serveru nebo dokáže vytížit procesor na 100 %. V drtivé většině případů je to zapříčiněno chybou v některém ze skriptů, který se třeba zacyklí. V případě, že k tomu dojde, je tím minimálně ohrožen plynulý chod ostatních webů a aplikací.

Abychom byli schopni efektivně předcházet podobným situacím, je nutno provést nastavení serveru a především pak omezení.

Všechna taková omezení potřebují počáteční podmínky, na jejichž základě je možné web korigovat. Základním předpokladem při omezování procesoru a paměti, je to, že každý web by měl běžet pod vlastním tzv. aplikačním poolem. Pod tímto termínem si můžeme představit „ohraničený“ prostor s vlastními parametry, který poskytuje webu či aplikaci systémové prostředky. Aplikace s vlastním aplikačním poolem tím pádem znamená izolaci jednotlivých webů, protože každý pool je samostatnou entitou.

Na aplikačním poolu je možné nastavit spousty parametrů a tím ovlivnit celkové využití paměti a procesoru jednotlivých procesů a tím i celého serveru. Nás především zajímá již zmíněná paměť a procesor. Na obrázku je zobrazeno nastavení - „Advanced Settings“ aplikačního poolu. V sekci CPU je nás bude především zajímat „Limit“, „Limit Action“, „Limit Interval“ a jejich hodnoty.

Limit určuje kolik procent z celkového výkonu serveru může proces přislušného aplikačního poolu spotřebovat. Hodnota se udává v jedné tisícině procenta, tedy 12000 na obrázku odpovídá 12 procentům celkového procesoru výkonu serveru.

obr1

Limit Action říká, co se má s procesem a aplikačním poolem stát, pokud je nastavená hranice překročena. Možnosti jsou dvě. KillW3wp, jak název vypovídá, “násilně ukončí” :) aplikaci, zatímco NoAction neudělá nic jiného, než že zapíše informaci o překročení hodnoty do EventLogu.

Limit Interval udává po jaké době od překročení limit se mají čítače vynulovat a aplikace může být opět spuštěna.

Nyní se podíváme na nastavení paměti aplikačního poolu, která se nastavuje v sekci recycling. Nejdůležitější jsou položky “Private Memory Limit” a “Virtual Memory Limit”. Obě hodnoty jsou v kilobajtech. První znamená, kolik si aplikační pool může vzít RAM paměti a druhá určuje, kolik může využít prostoru ve vnější paměti, což je obvykle na pevném disku. Pokud jsou hodnoty překročeny, dojke k tzv. recyklaci aplikačního poolu, prakticky tedy jeho restartu. Vedlejším efektem recyklace je zneplatnění sessions a viewstates pokud jsou spravovány procesem, tedy v režimu in-proc.

Omezování systémových prosředků na aplikačním poolu fungovalo již v IIS6.0. V IIS7.0 a 7.5 funguje samozřejmě také. Jestliže však na serveru IIS7.0 používáte FastCGI modul pro provoz PHP, objeví se po zapnutí procesorových limitů a volání PHP skriptu tato chybová hláška:

obr2

V takovém případě je potřeba stáhnout a nainstalovat hotfix: https://support.microsoft.com/kb/970208 . Na IIS 7.5 už pořeba instalace hotfixu není.

V tomto článku jsme si v rychlosti shrnuli možnosti nastavení aplikací na serveru s více weby a aplikacemi. Díky nim můžete zajistit izolaci a vyčlenění aplikací tak, aby nebyl ohrožen chod serveru.

- Jiří Mísař (Active24.cz)