Frage Wie kann ich meine asp.net mvc webapp nach einem App-Pool-Recycling aufwärmen?


Ich verwende eine ASP.NET MVC-Webanwendung in IIS 8.0. Meine Anwendung muss aufgewärmt werden, bevor Anfragen eingehen. Wir haben bereits einen Prozess, um die Anwendung automatisch zu aktualisieren, wenn wir neuen Code bereitstellen. Wir sehen jedoch regelmäßige App Pool Recycle-Ereignisse, die dazu führen, dass die App nicht aufgewärmt wird.

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


20
2018-04-23 18:08


Ursprung




Antworten:


Es gibt mehrere Dinge, die Sie tun können:

1. Anwendungsinitialisierung

Sie können verwenden Anwendungsinitialisierungsmodul Das kommt mit IIS 8.0 in-Box

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

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

Dies sendet eine Anfrage an den Stamm Ihrer App (initializationPage="/") jedes Mal, wenn Ihre App automatisch startet.

Sie können auch den Startmodus für Ihren Anwendungspool konfigurieren Always Running Das bedeutet, dass bei jedem Neustart von IIS sichergestellt wird, dass der Anwendungspool sofort gestartet wird (wenn Sie dann mit der rechten Maustaste auf Ihren Anwendungspool klicken) Advanced Settings

enter image description here

und Preload für Ihre Website selbst (Rechtsklick auf die Website dann Manage Site dann Advanced Settings

enter image description here

2. Deaktivieren Sie das Leerlauf-Timeout

Darüber hinaus können Sie idleTimeout deaktivieren (standardmäßig wird IIS die App nach 20 Minuten der Aktivität herunterfahren), indem Sie das Eingeben ändern Idle Time-out für Ihren Anwendungspool auf 0 (unendlich)

enter image description here

3. Deaktivieren Sie das regelmäßige Recycling

auch ausschalten Regular Time Interval (minutes) Standardmäßig würde IIS Ihre App alle 29 Stunden recyceln.

enter image description here

Zum


50
2018-05-15 03:01



Kommentare zu den Nachteilen dieser Einstellungen wären willkommen. Sicher gibt es einen Grund, warum sie keine Standardwerte sind. - user42134
Sicher, hoher Speicherverbrauch, wenn Sie mehrere Sites in derselben IIS-Box ausführen, da alle Sites die ganze Zeit am Leben bleiben, was zu einer sehr niedrigen Site-Dichte führt. Auch kein Schutz vor Speicherlecks in Ihren Anwendungen. Denken Sie daran, dass IIS bereits verfügbar war, bevor verwaltete Sprachen für das Web populär wurden und viele Anwendungen native Handler ausführen, die in Speicherlecks und seltsamen Status geraten, wenn sie für eine lange Zeit ausgeführt werden. Dies wurde getan, um Systemadministratoren zu helfen, die mitten in der Nacht aufwachten, um Server aufgrund von App-Problemen zurückzusetzen. Sie sind immer noch standardmäßig aus Gründen der Rückwärtsvergleichbarkeit voreingestellt - ahmelsayed
Alternativen in IIS 7.5 - Windows Server 2008 R2 ? - Kiquenet
Du kannst das bekommen Anwendungsinitialisierungsmodul für IIS 7.5 für # 1 zu arbeiten. # 2 und # 3 gelten unverändert für IIS 7.5 - ahmelsayed
FYI für Leute, die dies verwenden: die applicationInitialization gehört in <configuration><system.webServer> - Paul


Aus meiner Erfahrung wird AlwaysRunning und Preload aktiviert nicht viel schneller. Die meiste Wartezeit wird mit der dynamischen Kompilierung (die mit aspx precompile behoben werden kann) und dem Laden von Assemblys in Arbeitsspeicher und Caching fortgesetzt.


1
2017-10-01 13:10