¿Cómo puedo calentar mi aplicación web asp.net mvc después de reciclar un grupo de aplicaciones?

23

Estoy ejecutando una aplicación web ASP.NET MVC en IIS 8.0. Mi aplicación necesita ser calentada antes de tomar solicitudes. Ya tenemos un proceso para calentar la aplicación automáticamente cuando implementamos un nuevo código. Sin embargo, estamos viendo eventos periódicos de reciclaje del grupo de aplicaciones que están provocando que la aplicación no se caliente.

¿Existe alguna práctica recomendada para detectar un evento de reciclaje del grupo de aplicaciones y ejecutar un script o algún código?

AgileJon
fuente

Respuestas:

55

Hay varias cosas que puedes hacer:

1. Inicialización de la aplicación

Puede usar el Módulo de inicialización de aplicaciones que viene en la caja con IIS 8.0

puedes tener algo como esto en tu web.config

<applicationInitialization
     doAppInitAfterRestart="true" >
   <add initializationPage="/" />
</applicationInitialization>

Esto enviará una solicitud a la raíz de su aplicación ( initializationPage="/") cada vez que su aplicación se inicie automáticamente.

También puede configurar el Modo de inicio para su grupo de aplicaciones, lo Always Runningque significa que cada vez que IIS se reinicie, se asegurará de iniciar su grupo de aplicaciones de inmediato (esto si hace clic derecho en su grupo de aplicaciones y luegoAdvanced Settings

ingrese la descripción de la imagen aquí

y Preloadpara su sitio en sí (haga clic derecho en el sitio y Manage SiteluegoAdvanced Settings

ingrese la descripción de la imagen aquí

2. Desactivar el tiempo de espera inactivo

Además, puede deshabilitar idleTimeout (de manera predeterminada, IIS cerrará la aplicación después de 20 minutos de actividad) cambiando la entrada de Idle Time-outsu grupo de aplicaciones a 0 (infinito)

ingrese la descripción de la imagen aquí

3. Desactiva el reciclaje periódico

también apaga Regular Time Interval (minutes)por defecto IIS reciclaría su aplicación cada 29 horas.

ingrese la descripción de la imagen aquí

por

ahmelsayed
fuente
3
Se agradecerán los comentarios sobre los inconvenientes de esta configuración. Seguramente hay una razón por la que no son valores predeterminados.
user42134
2
Claro, alto consumo de memoria si ejecuta múltiples sitios en el mismo cuadro IIS ya que todos los sitios permanecen vivos todo el tiempo, lo que conduce a una densidad de sitios muy baja. Tampoco hay protección contra pérdidas de memoria en sus aplicaciones. Tenga en cuenta que IIS existía antes de que los lenguajes administrados se volvieran populares para la web y muchas aplicaciones ejecutaban controladores nativos que entraban en pérdidas de memoria y en estado extraño si se dejaban funcionando durante mucho tiempo. Eso se hizo para ayudar a los administradores de sistemas que tuvieron que despertarse en medio de la noche para restablecer los servidores debido a problemas con la aplicación. Todavía son valores predeterminados principalmente por razones de comparabilidad hacia atrás
dijo el
1
Alternativas en IIS 7.5 - Windows Server 2008 R2 ?
Kiquenet
2
Puede obtener el Módulo de inicialización de aplicaciones para IIS 7.5 para que funcione el n. ° 1. # 2 y # 3 se aplican tal cual a IIS 7.5
ahmelsayed
1
Para su información para personas que usan esto: el applicationInitializationentra en<configuration><system.webServer>
Paul
1

Desde mi experiencia, AlwaysRunning y Preload habilitado no acelera mucho. La mayor parte del tiempo de espera se realiza en la compilación dinámica (que se puede arreglar con la precompilación aspx) y en cargar ensamblados en la memoria y el almacenamiento en caché.

zmikic
fuente