Veebiserveri optimiseerimine

From ICO wiki
Winserver2012logo.png

Autor

Ees-ja perekonnanimi: Madis Mark

Rühm: A22 päevaõpe

Riistvara valik

Kõige tähtsam veebiserveri puhul on HTTP päringute arv sekundis ning arvutitevaheline kosteaeg. See kosteaeg on kulunud aeg päringu ja soovitud HTML-i saatmise lõpu vahel.

Veebiserveri puhul on oluline, et kliendid ei peaks ootama ning veebilehekülje avanemiseks võtaks aega alla sekundi.

Protsessor

HTTP päringu teenuse osutamine ei vaja niivõrd palju protsessori kasutust. Samas kasutamata ressursse saab kindlasti ära kasutada ja näiteks pakkida HTTP-d, et veebiserveri transpordikiirust parandada.

Kasutada tuleks igatahes 64-bitist protsessorit, mis ongi Windows Server 2012 eelduseks. Taktsagedusest on tähtsam suurte L2 või L3 protsessori vahemälu olemasolu, mis parandavad jõudlust märgatavalt.

Mälu

Mälu on veebiserveri puhul kõige olulisem. Enamikel veebiserveritel on lehed, mis on teistest populaarsemad ning kõige populaarsemate piltide puhul vahemälu kasutamine parandab HTML vastuste aega meeletult.

Tasub paigaldada vähemalt 4GB püsimälu koos võimaliku 16GB pikendusega, olenevalt tihedalt külastatud lehekülgede ja piltide suurusest.

Saaleala(page file) on soovitatav paigaldada operatsioonisüsteemist eraldi füüsilisele kettale, et saalefail ei kasutaks sama seadet, mis kasutavad teised tihedalt ligipääsetavad failid.

Kõvakettad

Kõvaketaste puhul on kõige olulisem, et lugemise/kirjutamise peade liikumisest tekitatud kosteaeg poleks pikk. Tuleks eelistada ülikiireid SSD kettaid, eriti veebi vahemälu puudumisel.

Võrguseadmed

Windows Server 2012 puhul on vägagi soovituslik kasutada PCI Express (PCIe) võrguseadmeid vastavate pesadega, et vähendada koormust protsessoril. Samuti tasub siinikiiruse piiri vältimiseks kasutada PCIe x8 või kõrgemaid pesasid 10 Gigabit Etherneti adapterite jaoks.

Energiasäästlikkus

Tänapäeval on energiakasutus aina olulisem osa serverite puhul ning tähtis on ressursse võimalikult otstarbekalt kasutada. Windows Server 2012 on õnneks optimeeritud suurepäraseks energiakasutuseks minimaalse jõudluse mõjuga, nii et enamike juhtude korral ei pea administraator seda manuaalselt veel tuunima.

Operatsioonisüsteemi tavad

  • Kui võimalik, siis on soovitatav teha värske Windows-i paigaldus. Tarkvara uuendamine võib jätta alles vanad ja ebasobivad registriseaded ning eelnevalt paigaldatud teenused ja aplikatsioonid, mis ressursse neelavad. Kui kasutatakse teist operatsioonisüsteemi, siis peaks selle teisele kettajaole installeerima.
  • Et vähendada ketta poole pöördumiste arvu, tasub süsteemi saalefail, operatsioonisüsteem, veebi andmed, ASP template vahemälu ja IIS(Internet Information Services) logifail hoida eraldi füüsilistel ketastel.
  • Süsteemi ressursside mõistlikuks jaotuseks on soovitatav paigaldada SQL Server ja IIS eraldi serveritele, kui võimalik.
  • Vältige üleliigseid teenuseid ja programme. Mõnikord on mõistlik kasutamata teenused deaktiveerida.

IIS 8.0 optimeerimine

Internet Information Services (IIS) 8.0 on osa Windows Server 2012-st. Kasutab sarnast protsessi nagu IIS 6.0. Kernel-mode veebidraiver(http.sys) võtab vastu ja suunab HTTP päringuid, ning suudab täita päringuid oma vastuse vahemälult.

IIS 8.0 protsess sõltub kernel-mode veebidraiverist, http.sys, mis on vastutav ühenduste halduse ja vastuste töötlemise eest.

Http.sys sisaldab vastuse vahemälu. Kui päring klapib kirjega vastuse vahemälus, siis http.sys saadab vahemälu vastuse otse kerneli režiimist.

Iis8.jpg

Kuna veebiserveril on olemas nii kerneli režiimi kui ka kasutaja režiimi komponendid, siis on vajalik mõlemaid optimeerida. Seega IIS 8.0 optimeerimine hõlmab järgnevate konfigureerimist:

  • Http.sys ja seotud kernel-mode vahemälu.
  • Worker protsessid ja user-mode IIS, kaasaarvatud aplikatsioonide pool-i seadistamine.
  • Mõned jõudlust mõjutavad optimeerimise parameetrid

Kernel-Mode häälestamine

Jõudlusega seotud http.sys sätted jagunevad kaheks: vahemälu haldus ja ühendus, ning päringuhaldus. Kõiki registrisätteid hoitakse kirjes:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Http\Parameters

NB! Kui HTTP teenus samal ajal töötab, on vaja see seadete värskendamiseks taaskäivitada

Vahemälu halduse sätted

Üks eelis http.sys puhul on kernel-mode vahemälu olemasolu. Kui HTML-i vastus on vahemälus, siis on võimalik HTTP päring tõita otse kerneli režiimist, mis vähendab tunduvalt CPU kulu.

Vahemälu kirje on kasulik ainult siis, kui seda kasutatakse. Aga see tarbib alati füüsilist mälu, kas seda kasutatakse või mitte. Peab hindama, kui otstarbekas on mingi kirje vahemälus ja mis on selle kulu(RAM) tema eluea jooksul, arvestades vabu ressursse(CPU ja füüsiline mälu) ning töökoormuse vajadusi. Http.sys üritab ainult vajalikke, aktiivselt kasutatud kirjeid vahemälus, kuid on võimalik suurendada veebiserveri jõudlust http.sys vahemälu konfigureerimisega.

Kasulikud sätted http.sys kernel-mode vahemälu jaoks:

  • UriEnableCache (vaikimisi 1)
  • UriMaxCacheMegabyteCount (vaikimisi 0) - Maksimaalne mälu, mis on saadav kernel-mode vahemälule. Vaikimisi 0 väärtus võimaldab süsteemil automaatselt ise kohanduda.
  • UriMaxUriBytes (vaikimisi 262144 bytes) - Maksimaalne kirje suurus vahemälus. Kui on piisavalt mälu, tasub seda limiiti suurendada.
  • UriScavengerPeriod (vaikimisi 120 seconds) - Http.sys vahemälu skanneeritakse pidevalt scavangeri poolt ning kirjed, mille poole skanneerimise ajal ei pöörduta, kustutatakse. Väärtuse suurendamine vähendab skanneeringute arvu, kuigi vahemälu kasutus võib suureneda, sest vähem kasutatud kirjed võivad sinna alles jääda.

Päringu -ja ühendusehalduse sätted

Windows Server 2012 puhul haldab http.sys ühendusi automaatselt, seega pole neid seadeid vaja muuta.

User-Mode häälestamine

User-Mode sätted mõjutavad IIS 8.0 protsesside käitumist. Enamik neist sätetest asub järgnevas XML konfiguratsioonifailis:

 %SystemRoot%\system32\inetsrv\config\applicationHost.config

Kasuta Appcmd.exe või IIS 8.0 Management Console-i, et neid muuta. Üldiselt tuvastatakse muutused automaatselt, seega ei ole vaja teha restarti.

User-Mode Cache Behavior sätted

Need sätted mõjutavad IIS 8.0 vahemälu puudutavat käitumist. Et täiesti user-mode vahemälu eemaldada, tuleb kustutada FileCacheModule (cachfile.dll) moodul installeeritud moodulite listist system.webServer/globalModules.

system.webServer/caching:

  • Enabled (vaikimisi True) - User-mode IIS vahemälu kasutamine.
  • enableKernelCache (vaikimisi True) - Kernel-mode vahemälu kasutamine.
  • maxCacheSize (vaikimisi 0) - Täpsustab IIS user-mode vahemälu suuruse megabaitides. Vaikimisi 0 väärtus teeb seda automaatselt vastavalt saadavale mälule. Vali see vastavalt tihedalt kasutatud failide suurusele ja püsimälu kogusele või IIS protsessi aadressiruumile.
  • maxResponseSize (vaikimisi 262144 bytes) - Paneb kuni kindla suurusega failid vahemällu.

Pakkimise sätted

Windows Server 2012 puhul pakib IIS 8.0 staatilise sisu automaatselt. Ja kui DynamicCompressionModule on paigaldatud, pakitakse ka dünaamiline sisu. Pakkimine vähendab ülekandekiirust, aga suurendab CPU kasutust.

Et täiesti pakkimine deaktiveerida, tuleb eemaldada StaticCompressionModule ja DynamicCompressionModule installeeritud moodulite listist system.webServer/globalModules.

system.webServer/httpCompression

  • staticCompression-EnableCpuUsage (vaikimisi 50)
  • staticCompression-DisableCpuUsage (vaikimisi 100)
  • dynamicCompression-EnableCpuUsage (vaikimisi 50)
  • dynamicCompression-DisableCpuUsage (vaikimisi 90)

Lubab pakkimist või mitte, vastavalt CPU kasutuse protsendile. Kui CPU kasutus langeb alla Enable läve, pakkimine lubatakse.

  • directory (vaikimisi %is %SystemDrive%\inetpub\temp\IIS Temporary Compressed Files) - Kataloog, kus hoitakse pakitud versioone staatilistest failidest. Kui süsteemi ketast kasutatakse tihti, tasub see kataloog liigutada muu kettale.
  • doDiskSpaceLimiting (vaikimisi True) - Määrab, kas limiit, kui palju kettaruumi pakitud failid saavad kasutada, eksisteerib.
  • maxDiskSpaceUsage (vaikimisi 100MB) - Määrab maksimaalse kettaruumi pakitud failidele, mis pakkimise kaustas viibivad. Võimalik, et seda on vaja suurendada, kui kogu pakitud sisu suurus on liiga kõrge.
  • doStaticCompression (vaikimisi True) - Määrab, kas staatiline sisu pakitakse.
  • doDynamicCompression (vaikimisi True) - Määrab, kas dünaamiline sisu pakitakse.

NB! IIS 8.0 serverite puhul, millel on väike keskmine CPU kasutus, tasub pakkimist lubada dünaamilise sisu korral, eriti kui HTML vastused on suured.

Default Document List

See moodul tegeleb HTTP päringutega ja tõlgib need spetsiifilise faili jaoks nagu Default.htm või Index.htm. Kui HTTP päring ei täpsusta failinime, siis see moodul otsib vaikimisi lubatud dokumentide listist. Dokumentide list peaks olema võimalikult väike ja mõistlikult koostatud, et jõudlus kannatada ei saaks.

Et täiesti vaikimisi dokumendid eemaldada, tuleb kustutada DefaultDocumentModule installeeritud moodulite listist system.webServer/globalModules.

system.webServer/defaultDocument

  • enabled (vaikimisi True) - Määrab, kas vaikimisi dokumendid on lubatud.
  • <files> element (vaikimisi Default.htm, Default.asp, Index.htm, Index.html, Iisstart.htm, Default.aspx) - Määrab failide nimed, mis on seatud paika vaikimisi dokumentidena.

Central Binary logimine

Binary IIS logimine vähendab CPU kasutust, ketta I/O-d ja kettaruumi kasutust. See on suunatud üheainsale failile binaarsüsteemis, mistahes kui suur on majutatud veebisaitide arv.

Seda saab lubada määrates centralLogFileMode väärtuseks CentralBinary ja enabled väärtuseks True. Logifail tasub liigutada süsteemi partitsioonilt eemale, et vältida konflikte süsteemi tegevuste ja logimise tegevuste vahel.

system.applicationHost/log

  • centralLogFileMode (vaikimisi Site) - Määrab logimise režiimi serveri jaoks.
  • enabled (vaikimisi False) - Määrab, kas central binary logimist kasutatakse.
  • diretory (vaikimisi %SystemDrive%\inetpub\logs\LogFiles) - Määrab kausta, kuhu kirjutatakse logid.

Aplikatsioonide ja lehekülgede optimeerimine

system.applicationHost/applicationPools/applicationPoolDefaults

  • queueLength (vaikimisi 1000) - Määrab kernel-mode veebidraiveri, http.sys, kui palju päringuid pannakse järjekorda aplikatsiooni ühikasutuse(pool) jaoks enne, kui tulevased päringud on tagasi lükatud. Kui seda väärtust ületatakse, lükkab IIS järgnevad päringud tagasi erroriga 503.
  • enable32BitAppOnWin64 (vaikimisi False) - Kui "True", siis lubatakse 32-bitisel programmil joosta arvutis, millel on 64-bitine protsessor. Kasutada oleks mõistlik siis, kui mälukasutus on probleemiks. 32-bitise programmi aadressiruumi limiit 64-bitisel masinal on aga 4GB.
  • allowSubDirConfig (vaikimisi True) - Määrab ära, kas IIS otsib web.config faile sisukataloogides, mis on kehtivast väärtusest väiksemad(True) või ei otsi neid faile(False)

IIS 8.0 moodulite haldamine

IIS 8.0 koosneb paljudest moodulitest, mis on vastavalt vajadusele kohandatavad. Protsessori tsüklite arvu ja mälu on võimalik kokku hoida, kui ebavajalikud moodulid eemaldada.

Veebiserver, mis on optimeeritud ainult lihtsate staatiliste failide jaoks, võib sisaldada ainult 5 moodulit: UriCacheModule, HttpCacheModule, StaticFileModule, AnonymousAuthenticationModule ja HttpLoggingModule.

Et eemaldada moodulid applicationHost.config failist, tuleb eemaldada ka kõik viited moodulile system.webServer/handlers ja system.webServer/modules sektsioonidest lisaks system.webServer/globalModules sektsioonile.

Classic ASP sätted

system.webServer/asp/cache

  • diskTemplateCacheDirectory (vaikimisi %SystemDrive%\inetpub\temp\ASP Compiled Templates) - Sisaldab kataloogi nime, mida ASP kasutab kompileeritud mallide varundamiseks, kui vahemälu saab täis. Soovitatav on määrata selleks kataloog, mida ei kasutata nii palju(nagu kettal, mis ei ole jagatud operatsioonisüsteemi, IIS logi või teiste tihedalt kasutatud sisuga)
  • maxDiskTemplateCacheFiles (vaikimisi 2000) - Määrab maksimaalse arvu kompileeritud ASP malle, mida varundatakse. Soovitatav on määrata selleks 0x7FFFFFFF)
  • scriptFileCacheSize (vaikimisi 500) - See määrab prekompileeritud skriptifailide arvu, mida vahemällu talletatakse. Soovitatav kasutada nii palju ASP malle, kui mälu lubab.
  • scriptEngineCacheMax (vaikimisi 250) - Määrab maksimaalse skriptimise mootorite arvu, mida ASP leheküljed talletavad mälus. Soovitatav kasutada nii palju skriptimootorite arvu kui mälu lubab.

ASP.NET kokkulangevuse(paralleelsuse) sätted

Vaikimisi piirab ASP.NET päringute kokkulangevust, et vähendada mälu kasutust serveris. Kõrge kokkulangevusega aplikatsioonid võivad vajada veidi kohandamist, et üldist jõudlust parandada. Neid sätteid hoitakse järgneva registrikirje all:

HKEY_LOCAL_MACHINE\Software\Microsoft\ASP.NET\4.0.30319.0\Parameters
  • MaxConcurrentRequestPerCpu (Vaikimisi 5000) - Määrab maksimaalse kokkulangevate päringute arvu. Tasub tõsta suuremaks, kui süsteem jooksutab programme, mis täidavad pikki, sünkroonseid I/O operatsioone, vastasel korral on oodata pikka kosteaega.

Protsesside taaskasutamise sätted

IIS administraatori kasutajaliidese valikud IIS protsesside taaskasutamiseks(recycling) pakuvad praktilisi lahendusi teravate olukordade või sündmuste jaoks ilma, et oleks vaja sekkuda, või uuesti teenus või arvuti üles seada. Sellised olukorrad sisaldavad endas mälulekkeid, suurenevat mälukasutust, või mittereageerivaid või paigalseisvaid protsesse. Tavaliste tingimuste puhul ei ole vaja taaskasutamise sätteid konfigureerida.

Protsessi taaskasutuse kindla programmi jaoks saab käivitada muutes recycling/periodicRestart elementi. Kui protsessi taaskasutatakse, siis järjekorras olevad ja käivitatavad päringud on nüristatud, ja uus protsessor käivitatakse samaaegselt, et uusi päringuid teenindada. Element recycling/periodicRestart kehtib iga aplikatsiooni kohta eraldi.

system.applicationHost/applicationPools/ApplicationPoolDefaults/recycling/periodicRestart

  • memory (vaikimisi 0) - Lubab protsesside taaskasutamist, kui virtuaalse mälu kasutus ületab määratud limiiti kilobaitides. See on kasulik säte 32-bitistele arvutitele, millel on väike 2GB aadressiruum. See aitab vältida ebaõnnestunud päringuid mälu puuduse puhul.
  • privateMemory (vaikimisi 0) - Lubab protsesse taaskasutada, kui privaatsed mälueraldused ületavad kindlat limiiti kilobaitides.
  • requests (vaikimisi 0) - Lubab protsesside taaskasutamist pärast kindla arvuga päringuid.
  • time (vaikimisi 29:00:00) - Lubab protsesside taaskasutamist pärast kindlat ajaperioodi.

Secure Sockets Layer(SSL) optimeerimise parameetrid

SSL kujutab endast lisa CPU kulu. Kõige kulukam SSL-i komponent on sessiooni kehtestamise kulu. Samuti võtavad kulu taasühendus, krüpteerimine ja dekrüpteerimine. Paremaks SSL jõudluseks soovitatav:

  • Lubada HTTP keep-alive SSL sessioonidel. See elimineerib sessiooni kehtestamise kulud.
  • Taaskasuta sessioone, kui see on sobiv, eriti non-keep-alive liikluse puhul.

NB! Pikemad võtmed pakuvad suuremat turvalisust, kuid kasutavad ka rohkem protsessorit. Samuti ei ole vaja kõike komponente krüpteerida.

ISAPI

Ei ole vaja spetsiaalset optimeerimist Internet Server Application Programming Interface aplikatsioonide jaoks.

Hallatud koodi optimeerimise nõuanded

IIS 8.0 integreeritud pipeline mudel võimaldab suurel määral paindlikkust ja pikendatavust. Oma loodud moodulid, mis on implementeeritud põhikoodi või hallatud koodi, saab sisestada pipeline-i, või nad saavad asendada teisi eksisteerivaid mooduleid. Kuigi see mudel pakub mugavust ja lihtsust, peab olema ettevaatlik, enne kui sisestada uued hallatud moodulid, mis globaalsetesse sündmustesse haakuvad. Globaalselt hallatud moodul tähendab seda, et kõik päringud, sealjuures staatiliste failide päringud, peavad puutuma hallatud koodi. Enda loodud moodulid pole kaitstud sündmuste eest nagu rämpsu kogumine. Lisaks, oma loodud moodulid lisavad tunduvalt CPU kasutusele juurde põhikoodi ja hallatud koodi vahelise koondamise pärast. Kui võimalik, tasub kasutada põhikoodis (C/C++) globaalseid mooduleid.

Enne, kui paigaldad ASP.NET veebilehekülje, veendu, et kõik skriptid on kompileeritud. Seda saab teha iga kataloogi .NET skripti kutsumisel. Taaskäivita IIS, kui kompileerimine on lõpetatud. Kompileeri uuesti, kui on tehtud muudatused machine.config, web.config või teistes .aspx skriptides.

Kui sessiooni olekut ei ole tarvis, tuleb see välja lülitada igal leheküljel eraldi.

Kui jooksutad mitmeid masinaid, mis sisaldavad ASP.NET skripte isoleeritud režiimis, on mõistlik jälgida mälukasutust. Tuleb olla kindel, et serveril on piisavalt RAM-i kokkulangevate jooksutatud programmide poolist. Kaaluge mitme aplikatsioonidomeeni kasutamist mitme isoleeritud protsesside asemel.

ASP.NET jõudluse soovitused

NTFS sätted

Globaalne lüliti NtfsDisableLastAccessUpdate (REG_DWORD) 1 asub:

HKLM\System\CurrentControlSet\Control\FileSystem\

See lüliti vähendab ketta I/O koormust ja kosteaegasid lülitades välja kuupäeva ja kellaaja uuendamise viimase faili või kataloogi pöördumisel. Vaikimis väärtuseks on 1.

Värsked Windows Server 2012, Windows Server 2008 R2 ja Windows Server 2008 paigaldused määravad selle koheselt 1-ks, seega pole sellisel juhul vaja seda muuta. Kui aga on tegemist vanema Windows-i versiooniga või on Windows uuendatud, on vaja ise väärtuseks 1 määrata.

Uuenduste väljalülitamine on efektiivne, kui kasutatakse suurt andmete hulka, mis koosneb tuhandetest kataloogidest.

Kasutatud kirjandus

1. Performance Tuning Guidelines for Windows Server 2012

2. http://www.dba-oracle.com/t_best_webserver_hardware_configuration.htm