¿Cómo deshabilitar el tiempo de espera inactivo del grupo de aplicaciones en IIS7?

Respuestas:

184

Sí, establecer el valor de tiempo de espera inactivo en cero deshabilitará los tiempos de espera inactivos.

Curiosamente, esto no está documentado en los documentos de MS, pero mi evidencia de esto surge de:

  • Esquema de configuración de IIS

    Si echa un vistazo al esquema de configuración de IIS en:

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

    La definición de esquema para idleTimeoutdebajo

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

    parece que:

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

    Si observa el validationParameteratributo, vemos un rango de 0 a 2592000 segundos ( ,60especifica la granularidad de la configuración, en este caso el valor debe ser divisible por 60 [un minuto]).

    Si ve un valor inicial admisible de 0, eso generalmente indica que la configuración se puede deshabilitar.

  • Configuración del tiempo de espera de inactividad del grupo de aplicaciones IIS7

    Brad Kingsley es el fundador y CEO de OrcsWeb, un proveedor de alojamiento de Microsoft y Gold Partner bastante conocido, respetado y confiable.

  • Luego también está la evidencia empírica del hecho de que "simplemente funciona".

Kev
fuente
3
un aviso a los demás: después de leer esto, configuré mi tiempo de espera inactivo en 0 en IIS7 y comenzó a agotar el tiempo de inmediato: cada carga de la página tardó aproximadamente 15 segundos. Ahora lo he subido a 600 y todo vuelve a ser increíblemente rápido.
nailitdown
1
@nailitdown: es posible que desee verificarlo dos veces. Acabo de establecer el tiempo de espera de mi grupo de aplicaciones IIS6 en 0, y funciona bien. Existe la posibilidad de que sea diferente entre IIS7 / IIS6, lo que sería bueno saber.
Doug S
3
desde que publiqué que teníamos múltiples problemas con el VPS con el que estaba trabajando ... muy probablemente estaba mal configurado de alguna manera. Acabo de intentar duplicarlo en el nuevo VPS, y se comporta correctamente, como se describe.
nailitdown
3
@ Zero3 - bueno ... antes de cambiar cualquier configuración en un sitio de alto tráfico, siempre debe probar los efectos secundarios, etc. en su entorno de puesta en escena / QA. Además, durante el tiempo en que aplique el cambio a su entorno de producción, realmente debería lanzar una página de mantenimiento para los usuarios de cara al público hasta el momento en que el cambio surta efecto. Debe administrar estos cambios para que no haya sorpresas.
Kev
2
@ Zero3: sí, cambiar muchas de las configuraciones del grupo de aplicaciones requiere que se reinicie el proceso para que surta efecto de manera predeterminada. Puede cambiar esto con DisallowRotationOnConfigChange ; consulte serverfault.com/questions/333907/… para obtener un poco más sobre eso.
TristanK
11

¡Gran respuesta! gracias Kev!

Una pequeña actualización: la URL que publicó se ha movido y ahora está: http://bradkingsley.com/iis7-application-pool-idle-time-out-settings/

Me preguntaba si hay una razón por la cual este no es el valor predeterminado, y si puede haber un impacto en el rendimiento para mantener el grupo de aplicaciones abierto durante demasiado tiempo. Bueno, mantenerlo cuando está inactivo no le causará más problemas que no reciclarlo cuando hay tráfico y no hay tiempo de inactividad. Si le preocupan las pérdidas de memoria u otras pérdidas de recursos, existe una configuración para forzar el reciclaje en función del tiempo / número de solicitudes desde el último reciclaje / consumo de memoria. Aquí está la documentación para ello:

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

Voy a configurar mi servidor para que no se recicle en inactivo (idleTimeout = 0), y recicle cada 24 horas: Reciclaje> Intervalo de tiempo regular = 1440

Shay Mandel
fuente
15
Probablemente sea mejor configurar su reciclaje en un tiempo fijo (p. Ej., 0100) en lugar de 24 horas, ya que eso dará como resultado 24 horas desde el último reinicio del servidor / iis reset.
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" 
}
usuario6470603
fuente
66
Una explicación de este código pegado sería útil.
Luke Alderton