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?

War es hilfreich?

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.

Quelle

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top