Comment puis-je réchauffer ma webapp asp.net mvc après un recyclage de pool d'applications?

23

J'exécute une webapp ASP.NET MVC dans IIS 8.0. Ma candidature doit être préchauffée avant de prendre des demandes. Nous avons déjà un processus pour réchauffer automatiquement l'application lorsque nous déployons un nouveau code. Cependant, nous voyons des événements périodiques de recyclage du pool d'applications qui entraînent le réchauffement de l'application.

Existe-t-il une meilleure pratique pour détecter un événement de recyclage de pool d'applications et exécuter un script ou du code?

AgileJon
la source

Réponses:

55

Vous pouvez faire plusieurs choses:

1. Initialisation de l'application

Vous pouvez utiliser le module d'initialisation d'application fourni avec IIS 8.0

vous pouvez avoir quelque chose comme ça dans votre web.config

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

Cela enverra une demande à la racine de votre application ( initializationPage="/") chaque fois que votre application démarre automatiquement.

Vous pouvez également configurer le mode de démarrage de votre pool d'applications, Always Runningce qui signifie qu'à chaque redémarrage d'IIS, il s'assurera de démarrer votre pool d'applications immédiatement (ceci si un clic droit sur votre pool d'applications puisAdvanced Settings

entrez la description de l'image ici

et Preloadpour votre site lui-même (clic droit sur le site Manage SitepuisAdvanced Settings

entrez la description de l'image ici

2. Désactiver le délai d'inactivité

De plus, vous pouvez désactiver idleTimeout (par défaut, IIS arrêtera l'application après 20 minutes d'activité) en modifiant l'entrée dans Idle Time-out de votre pool d'applications sur 0 (infini)

entrez la description de l'image ici

3. Désactivez le recyclage périodique

désactiver également Regular Time Interval (minutes)par défaut IIS recyclerait votre application toutes les 29 heures.

entrez la description de l'image ici

Pour

ahmelsayed
la source
3
Des commentaires sur les inconvénients de ces paramètres seraient appréciés. Il y a sûrement une raison pour laquelle ils ne sont pas par défaut.
user42134
2
Bien sûr, une consommation de mémoire élevée si vous exécutez plusieurs sites sur la même boîte IIS car tous les sites restent actifs en permanence, ce qui entraîne une très faible densité de sites. De plus, aucune protection contre les fuites de mémoire dans vos applications. Gardez à l'esprit qu'IIS existait avant que les langues gérées ne deviennent populaires pour le Web et que de nombreuses applications exécutaient des gestionnaires natifs qui subissaient des fuites de mémoire et un état étrange s'ils restaient en cours d'exécution pendant longtemps. Cela a été fait pour aider les administrateurs système qui ont dû se réveiller au milieu de la nuit pour réinitialiser les serveurs en raison de problèmes d'application. Ce sont toujours des valeurs par défaut, principalement pour des raisons de comparabilité en
amont
1
Alternatives dans IIS 7.5 - Windows Server 2008 R2 ?
Kiquenet
2
Vous pouvez obtenir le module d'initialisation d'application pour IIS 7.5 pour que # 1 fonctionne. # 2 et # 3 s'appliquent tels
quels
1
FYI pour les gens qui utilisent ceci: le applicationInitializationpasse<configuration><system.webServer>
Paul
1

D'après mon expérience, AlwaysRunning et Preload activé n'accélèrent pas beaucoup. Le temps d'attente le plus long va à la compilation dynamique (qui peut être corrigée avec la précompilation aspx) et au chargement des assemblages en mémoire et en cache.

zmikic
la source