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.
- Instalacja Application Initialization
- Uruchom appwarmup_x64.msi
- Zrestartuj server
- Wybierz który application pool ma być zawsze uruchomiony
- Uruchom CMD jako Administrator
- Przejdź do lokalizacji c:\Windows\system32\inetsrv\
- 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 ;)
nExoR
kojn
nExoR
kojn