Przyspieszyć IIS

Zabieram się do tego artykułu jak pies do jeża chyba więc prościej będzie wrzucać treść na raty…

Problem:
Zmieniam coś w konfiguracji lub podmieniam coś w aplikacji webowej. Wykonuję iisreset. Pierwsze użycie stronki trwa wieki. Nieważne czy jest to Sharepoint czy prosta witryna z gołą babą. Uruchamianie worker procesów, kompilowanie aplikacji, sprawdzenie certyfikatów a raczej CRLi … to wszystko zabiera nam cenne sekundy. Do tego Application poole mają swoje czasy uśpienia i recycling co powoduje, że przy braku użytkowników, strona znowu usypia… Przy rzadko odwiedzanych stronach generalnie mamy wrażenie że coś jest nie tak i za każdym razem musimy czekać nawet dwie minuty by zobaczyć efekt końcowy. Jak z tym walczyć? No jest kila trików, między innymi „warm up” skrypty w PS używane od lat przez Microsoft przy prezentacjach Sharepointów… Nie opisze tutaj wszystkich sztuczek a jedynie podam prosty sposób na  automatyczne wymuszenie uruchomienia application poola czyli uruchomienia worker procesu na IIS. Bez zaawansowanych skryptów i potrzeby wnikliwego analizowania swojej aplikacji.

Rozwiązanie:
Narzędzie stworzone do IIS 8 dostępne dla IIS 7.5 o nazwie Application Initialization
Użycie banalne, składające się z dwóch kroków.

  1. Instalacja Application Initialization
    1. Uruchom appwarmup_x64.msi
    2. Zrestartuj server
  1. Wybierz który application pool ma być zawsze uruchomiony
    1. Uruchom CMD jako Administrator
    1. Przejdź do lokalizacji c:\Windows\system32\inetsrv\
  1. Przykładowo dla DefaultAppPool uruchom
    appcmd.exe set apppool „DefaultAppPool” /startMode:AlwaysRunning

W ramach sprawdzenia możesz zrobić iisreset i zobaczyć że na liście Worker processów pojawi się DefaultAppPool pomimo braku wywołania strony.

Generalnie wypróbujcie to w domu, u mnie 120 sekund do przodu ;)