Jak wyłączyć limit czasu bezczynności puli aplikacji w usługach IIS7?

Odpowiedzi:

184

Tak, ustawienie wartości limitu czasu bezczynności na zero spowoduje wyłączenie limitów czasu bezczynności.

Co dziwne, nie jest to udokumentowane w dokumentach MS, ale moje dowody na to pochodzą z:

  • Schemat ustawień usług IIS

    Jeśli spojrzysz na schemat ustawień usług IIS w:

    C:\Windows\System32\inetsrv\config\schema\IIS_schema.xml

    Definicja schematu dla idleTimeoutunder

    <sectionSchema name="system.applicationHost/applicationPools">

    to wygląda jak:

    <attribute name="idleTimeout" 
           type="timeSpan" 
           defaultValue="00:20:00" 
           validationType="timeSpanRange" 
           validationParameter="0,2592000,60"/>

    Jeśli spojrzysz na validationParameteratrybut, zobaczysz zakres od 0 do 2592000 sekund (format,60 określa szczegółowość ustawienia, w tym przypadku wartość musi być podzielna przez 60 [jedna minuta]).

    Jeśli widzisz początkową dopuszczalną wartość, 0to zwykle oznacza to, że ustawienie można wyłączyć.

  • Ustawienia limitu czasu bezczynności puli aplikacji usług IIS7

    Brad Kingsley jest założycielem i dyrektorem generalnym OrcsWeb, który jest dość dobrze znanym, szanowanym i zaufanym dostawcą usług hostingowych Microsoft oraz Złotym Partnerem.

  • Jest też empiryczny dowód na to, że „po prostu działa”.

Kev
źródło
3
uwaga dla innych - po przeczytaniu tego, ustawiłem mój limit czasu bezczynności na 0 w IIS7 i natychmiast zaczął on upływać - każde ładowanie strony trwało około 15 sekund. Teraz podniosłem go do 600 i wszystko znowu jest niesamowicie szybkie.
nailitdown
1
@nailitdown: Możesz to sprawdzić jeszcze raz. Po prostu ustawiłem limit czasu puli aplikacji IIS6 na 0 i działa dobrze. Jest szansa, że ​​różni się to między IIS7 / IIS6, co dobrze byłoby wiedzieć.
Doug S
3
odkąd opublikowałem, że mamy wiele problemów z VPS, z którym pracowałem ... całkiem prawdopodobne, że został w jakiś sposób źle skonfigurowany. Właśnie próbowałem go skopiować na nowym VPS i zachowuje się poprawnie, zgodnie z opisem.
Nailitdown
3
@ Zero3 - cóż ... przed zmianą jakichkolwiek ustawień w witrynie o dużym natężeniu ruchu należy zawsze przetestować pod kątem skutków ubocznych itp. W środowisku przejściowym / QA. Również w czasie, gdy wprowadzasz zmianę w środowisku produkcyjnym, naprawdę powinieneś wyrzucić stronę konserwacyjną dla użytkowników publicznych, dopóki zmiana nie zacznie obowiązywać. Musisz zarządzać tymi zmianami, aby nie było niespodzianek.
Kev,
2
@ Zero3 - tak, zmiana wielu ustawień puli aplikacji wymaga ponownego uruchomienia procesu, aby odniosła skutek, co domyślnie następuje od razu. Możesz to zmienić za pomocą DisallowRotationOnConfigChange - zobacz serverfault.com/questions/333907/ ... aby uzyskać więcej informacji na ten temat.
TristanK,
11

Świetna odpowiedź! dzięki Kev!

Mała aktualizacja: opublikowany adres URL został przeniesiony i jest teraz: http://bradkingsley.com/iis7-application-pool-idle-time-out-settings/

Zastanawiałem się, czy istnieje powód, dla którego nie jest to ustawienie domyślne i czy może to mieć wpływ na wydajność w przypadku zbyt długiego utrzymywania otwartej puli aplikacji. Cóż, utrzymanie go, gdy jest bezczynny, nie sprawi ci więcej kłopotów, niż rezygnacja z recyklingu, gdy jest ruch i nie ma czasu bezczynności. Jeśli martwisz się wyciekami pamięci lub innymi wyciekami zasobów, istnieje ustawienie wymuszania recyklingu na podstawie czasu / liczby żądań od ostatniego recyklingu / zużycia pamięci. Oto dokumentacja do tego:

http://technet.microsoft.com/en-us/library/cc753179(v=ws.10).aspx

Mam zamiar ustawić serwer na brak recyklingu w stanie bezczynności (idleTimeout = 0) i recykling co 24 godziny: Recycling> Regular Time Interval = 1440

Shay Mandel
źródło
15
Prawdopodobnie lepiej jest ustawić swój cykl na stały czas (np. 0100) zamiast 24 godzin, ponieważ spowoduje to 24 godziny od ostatniego restartu / resetu serwera.
Neal
1
Import-Module WebAdministration

$pools = Get-ChildItem iis:\apppools

foreach ($pool in $pools)
{ 
$poolname = $pool.Name

Set-ItemProperty IIS:\AppPools\$poolname -name processModel -value @{idletimeout="20"}
Set-ItemProperty IIS:\AppPools\$poolname -name processModel -value @{idletimeoutaction="Suspend"}
set-ItemProperty IIS:\AppPools\$poolname -Name Recycling.periodicRestart -Value @{time="0"} 
set-ItemProperty IIS:\AppPools\$poolname -Name Recycling.periodicRestart.schedule -Value @{value="02:00:00"} 
Set-ItemProperty IIS:\AppPools\$poolname -name Recycling -value @{logEventOnRecycle="Time, Requests, Schedule, Memory, IsapiUnhealthy, OnDemand, ConfigChange, PrivateMemory"} 

Write-Host "Updated $poolname settings" 
}
user6470603
źródło
6
Przydatne byłoby wyjaśnienie tego wklejonego kodu.
Luke Alderton