Wie kann ich meine asp.net mvc webapp nach dem Recycling eines App-Pools aufwärmen?

23

Ich verwende eine ASP.NET MVC-Webanwendung in IIS 8.0. Meine Anwendung muss vor dem Entgegennehmen von Anfragen aufgewärmt werden. Wir haben bereits einen Prozess zum automatischen Aufwärmen der Anwendung, wenn wir neuen Code bereitstellen. Es werden jedoch regelmäßig App Pool Recycle-Ereignisse angezeigt, die dazu führen, dass die App nicht aufgewärmt wird.

Gibt es eine bewährte Methode zum Erkennen eines App-Pool-Recycling-Ereignisses und zum Ausführen eines Skripts oder Codes?

AgileJon
quelle

Antworten:

55

Sie können verschiedene Dinge tun:

1. Anwendungsinitialisierung

Sie können das Anwendungsinitialisierungsmodul verwenden, das im Lieferumfang von IIS 8.0 enthalten ist

Sie können so etwas in Ihrem haben web.config

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

Dies sendet initializationPage="/"jedes Mal, wenn Ihre App automatisch gestartet wird, eine Anfrage an das Stammverzeichnis Ihrer App ( ).

Sie können auch den Startmodus für Ihren Anwendungspool konfigurieren. Bei Always Runningjedem Neustart von IIS wird sichergestellt, dass der Anwendungspool sofort gestartet wirdAdvanced Settings

Bildbeschreibung hier eingeben

und Preloadfür Ihre Site selbst (Rechtsklick auf die Site dann Manage SitedannAdvanced Settings

Bildbeschreibung hier eingeben

2. Deaktivieren Sie das Zeitlimit für Leerlauf

Darüber hinaus können Sie idleTimeout deaktivieren (standardmäßig wird die App von IIS nach 20 Minuten Aktivität heruntergefahren), indem Sie das of in Idle Time-outfür Ihren Anwendungspool auf 0 (unendlich) setzen.

Bildbeschreibung hier eingeben

3. Deaktivieren Sie das regelmäßige Recycling

auch deaktivieren Regular Time Interval (minutes)standardmäßig IIS würde Ihre Anwendung alle 29 Stunden recyceln.

Bildbeschreibung hier eingeben

Zum

ahmelsayed
quelle
3
Kommentare zu Nachteilen dieser Einstellungen sind willkommen. Sicher gibt es einen Grund, warum sie keine Standardeinstellungen sind.
user42134
2
Sicher, hoher Speicherverbrauch, wenn Sie mehrere Sites auf derselben IIS-Box ausführen, da alle Sites die ganze Zeit am Leben bleiben, was zu einer sehr geringen Site-Dichte führt. Auch kein Schutz gegen Speicherlecks in Ihren Anwendungen. Denken Sie daran, dass es IIS gab, bevor verwaltete Sprachen für das Web populär wurden und auf vielen Apps native Handler ausgeführt wurden, die Speicherlecks und seltsame Zustände aufwiesen, wenn sie für längere Zeit nicht ausgeführt wurden. Dies sollte Sysadmins helfen, die mitten in der Nacht aufwachen mussten, um Server aufgrund von App-Problemen zurückzusetzen. Meistens sind sie aus Gründen der Rückwärtsvergleichbarkeit immer noch
Standardwerte
1
Alternativen in IIS 7.5 - Windows Server 2008 R2 ?
Kiquenet
2
Sie können das Application Initialization Module für IIS 7.5 for # 1 zum Laufen bringen. # 2 und # 3 gelten
unverändert
1
FYI für Leute, die dies benutzen: das applicationInitializationgeht in<configuration><system.webServer>
Paul
1

Nach meiner Erfahrung beschleunigen AlwaysRunning und Preload nicht viel. Die meiste Wartezeit entfällt auf die dynamische Kompilierung (die mit aspx precompile behoben werden kann) und das Laden von Assemblys in den Speicher und das Caching.

zmikic
quelle