ASP.NET-Anwendung auf IIS7 - sehr langsamen Start nach iisreset
-
10-07-2019 - |
Frage
Ich habe eine ASP.NET 3.5-Website unter IIS7 auf Windows 2008 ausgeführt wird.
Wenn ich IIS neu starten (iisreset), dann eine Seite getroffen, die erste Inbetriebnahme ist sehr langsam.
Ich sehe die folgende Aktivität in Process Explorer:
- w3wp.exe Spawns, zeigt aber 0% CPU Aktivität für etwa 60 Sekunden
- Schließlich geht w3wp.exe auf 50% CPU für ca. 5 Sekunden und dann die Seite Lasten.
Ich sehe keine anderen Prozesse während dieser Zeit entweder mit CPU. Es besteht im Wesentlichen hängt nur.
Was ist los während der ganzen Zeit? Wie kann ich die Spur, was die ganze Zeit nimmt?
Lösung 4
Ich finde, dass es eine Netzwerkverzögerung war eine erste Verbindung von dem Front-End-Web-Server auf den Datenbankserver zu machen.
Das Problem war eigentümlich Windows 2008 und unsere spezifische Netzwerk-Hardware.
war die Auflösung des folgenden auf dem Web-Server zu deaktivieren:
Andere Tipps
Wir hatten ein ähnliches Problem und es stellte sich heraus, Windows-Timing aus für den Widerruf von Signaturzertifikaten Überprüfung zu sein. Überprüfen Sie, ob Ihr Server versucht, irgendwo zu rufen (z crl.microsoft.com). Vielleicht haben Sie einen Proxy-Einstellung nicht richtig? Oder eine Firewall im Weg? Wir schließlich stellten wir fest genug Kontrolle über den Server hatte und nicht zu ‚zu Hause anrufen‘ wollte, so dass wir einfach die Kontrolle deaktiviert. Sie können dies tun mit .NET 2.0 SP1 und später durch die Zugabe von folgenden auf die machine.config.
<runtime> <generatePublisherEvidence enabled="false"/> </runtime>
Ich bin nicht sicher, wenn Sie ihn nur in Ihrem app.config / web.config setzen können.
IL in Maschinen nativen Code umgewandelt wird (Assembly) von den Just-In-Time-Compiler und Sie erhalten zu warten, während der ganze Magie passiert.
Wenn Sie den Quellcode kompilieren zu Code verwaltet, übersetzt der Compiler die Quelle in Microsoft Intermediate Sprache (MSIL). Das ist ein CPU-unabhängiger Satz von Anweisungen das kann effizient umgesetzt werden nativen Code. Microsoft Intermediate Sprache (MSIL) eine Übersetzung verwendet als die Ausgabe einer Anzahl von Compiler. Es ist der Eingang in einem Just-in-Time-Compiler (JIT). Das Common Language Runtime enthält eine JIT Compiler für die Umwandlung von MSIL nativen Code.
Bevor Microsoft Intermediate Language (MSIL) kann es ausgeführt werden kann, muss sein durch das .NET Framework konvertiert Just-in-Time (JIT) Compiler nativen Code. Dies ist CPU-spezifischen Code, läuft auf dem gleichen Computer-Architektur wie die JIT-Compiler. Anstatt mit Zeit und Erinnerung all das konvertieren MSIL in einem Portable Executable (PE) Datei zu nativen Code. Er wandelt die MSIL wie während der Ausführung benötigt werden, dann speichert den resultierenden nativen Code so seine zugänglich für alle späteren nennt.
Das ist die Erstellung von asp.Net Seiten in Zwischensprache + JIT-Kompilierung - es kommt nur das erste Mal, wenn die Seite geladen wird. (Siehe http://msdn.microsoft.com/en-us/library/ ms366723.aspx )
Wenn es stört Sie wirklich dann Sie es geschieht durch Pre-Kompilierung Ihrer Website zu stoppen.
EDIT: Just wieder lesen die Frage - 60 Sekunden ist sehr lang, und man würde erwarten, dass einige Prozessoraktivität während dieser Zeit zu sehen. Überprüfen Sie die EventLog für Fehler / Nachrichten in den System- und Anwendungsziele. Versuchen Sie auch einen Crash-Dump des w3wp Prozess während dieser 60 Sekunden zu schaffen -. es eine Chance gibt, könnten Sie erkennen, was von seinem Tun an einigen der Aufruflisten suchen
Wenn es dauert genau 60 Sekunden jedes Mal dann seine wahrscheinlich, dass seine auf etwas zu warten, um das Zeitlimit - 60 Sekunden ist eine schöne runde Zahl. Stellen Sie sicher, dass es die richtige Verbindungen zu den Domänencontrollern etc ...
hat(Wenn es einige IIS Diagnose-Tools, die einen besseren Job machen würde dann ich fürchte, ich bin mir nicht bewusst von ihnen, diese Frage zu ServerFault besser geeignet sein könnte, ist die oben ein viel Entwickler-ish Ansatz Fehlerbehebung :-P)
länger als 60 Sekunden klingt faul. Versuchen Sie, eine test.html Seite ausgeführt wird, um zu sehen, wie lange das dauert. Das wird IIS7 Rolle isoliert.
Dann umbenennen vorübergehend web.config, global.asax und Bewerbungsmappen und versucht, eine test.aspx Seite (sehr einfache Seite). Das wird ASP.NET isolieren.
Wenn diese beiden schnell (das heißt etwa 10 Sekunden), dann ist es Ihre Anwendung. Aber, wenn entweder langsam ist dann nicht die Anwendung und etwas mit dem Server selbst.
Dieser Hut nichts mit JIT-Kompilierung zu tun. Der normale C # Compiler kompiliert den Code hinter Dateien (aspx.cs) in Zwischensprache in eine Baugruppe beim Start, wenn diese Baugruppe dont oder Code-Dateien geändert haben existiert. Ihre Website-Baugruppe wird im Ordner „ist“ Ihre Website befindet.
In der Tat der JIT-Kompilierung occures danach, aber das ist sehr schnell und wird nicht mehrere Minuten dauern. JIT-Kompilierung geschieht bei jedem Start einer .net-Anwendung, und das wird nicht länger als eine Ansicht Sekunden.
Sie können den copmpiling Ihrer Website vermeiden, wenn Sie den bereits kompilierte Website Baugruppe (YourWebsite.dll) in den Ordner ist bereitstellen. Es ist auch möglich, nur die aspx-Dateien zu implementieren und den Code hinter Dateien (aspx.cs) Dateien entfernt verlassen.