Как отключить время простоя пула приложений в IIS7?

Ответы:

184

Да, установка значения времени простоя на ноль отключит время простоя.

Как ни странно, это не задокументировано в документации MS, но мои доказательства этого вытекают из:

  • Схема настроек IIS

    Если вы посмотрите на схему настроек IIS в:

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

    Определение схемы для idleTimeoutпод

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

    это выглядит как:

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

    Если вы посмотрите на validationParameterатрибут, мы увидим диапазон от 0 до 2592000 секунд ( ,60указывает гранулярность настройки, в этом случае значение должно делиться на 60 [одну минуту]).

    Если вы видите начальное допустимое значение, 0то это обычно означает, что настройка может быть отключена.

  • Настройки времени ожидания простоя пула приложений IIS7

    Брэд Кингсли - основатель и генеральный директор OrcsWeb, который является довольно известным, уважаемым и заслуживающим доверия хостером Microsoft и Золотым партнером.

  • Тогда есть также эмпирическое доказательство того факта, что это «просто работает».

Кев
источник
3
Headsup другим - после прочтения этого я установил для IIS7 время простоя на 0, и он сразу начал отсчитываться - каждая загрузка страницы занимала 15 секунд или около того. Теперь я увеличил его до 600, и все снова стало невероятно быстрым.
2012 года
1
@nailitdown: вы можете проверить это еще раз. Я просто установил тайм-аут пула приложений IIS6 на 0, и он работает нормально. Существует вероятность того, что в IIS7 / IIS6 все по-другому, что было бы полезно знать.
Даг С
3
так как я написал, что у нас было несколько проблем с VPS, с которым я работал ... вполне вероятно, что он был неправильно настроен. Я просто попытался скопировать его на новый VPS, и он ведет себя правильно, как описано.
nailitdown
3
@ Zero3 - хорошо .... прежде чем изменять какие-либо настройки на сайте с высоким трафиком, вы всегда должны проверять наличие побочных эффектов и т. Д. В вашей среде подготовки / QA. Кроме того, в то время, когда вы применяете изменения в своей производственной среде, вам действительно следует открывать страницу обслуживания для общедоступных пользователей, пока изменения не вступят в силу. Вы должны управлять этими изменениями, чтобы не было сюрпризов.
Кев
2
@ Zero3 - да, для изменения многих настроек пула приложений требуется перезапуск процесса, который по умолчанию происходит сразу же. Вы можете изменить это с DisallowRotationOnConfigChange - см serverfault.com/questions/333907/... для немного больше об этом.
TristanK
11

Отличный ответ! спасибо Кев!

Небольшое обновление: URL-адрес, который вы разместили, перемещен, и теперь он: http://bradkingsley.com/iis7-application-pool-idle-time-out-settings/

Мне было интересно, есть ли причина, по которой это не по умолчанию, и может ли это повлиять на производительность, если пул приложений будет открыт слишком долго. Что ж, поддержание его в бездействующем состоянии не доставит вам больше хлопот, чем его утилизация при отсутствии трафика и простоя. Если вас беспокоят утечки памяти или другие утечки ресурсов, есть настройка принудительной перезапуска на основе времени / количества запросов с момента последней перезапуска / потребления памяти. Вот документация для этого:

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

Я собираюсь настроить свой сервер на отсутствие перезапуска на холостом ходу (idleTimeout = 0) и перезапуск каждые 24 часа: переработка> Регулярный интервал времени = 1440

Шей Мандель
источник
15
Возможно, вам лучше установить фиксированное время (например, 0100), а не 24 часа, поскольку это приведет к 24 часам с момента последнего перезапуска сервера / сброса iis.
Нил
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
источник
6
Объяснение этого вставленного кода было бы полезно.
Люк