13 Stimmen

ASP.NET-Anwendung auf IIS7 - sehr langsamer Start nach iisreset

Ich habe eine ASP.NET 3.5-Website, die unter IIS7 auf Windows 2008 läuft.

Wenn ich IIS neu starte (iisreset) und dann eine Seite aufrufe, ist der erste Start sehr langsam.

Ich sehe die folgende Aktivität im Process Explorer:

  • w3wp.exe wird gestartet, zeigt aber 0% CPU Aktivität für etwa 60 Sekunden
  • Schließlich geht w3wp.exe auf 50% CPU für etwa 5 Sekunden und dann wird die Seite lädt.

Ich sehe auch keine anderen Prozesse, die während dieser Zeit die CPU belasten. Es hängt im Grunde nur.

Was ist in dieser Zeit los? Wie kann ich herausfinden, was diese ganze Zeit in Anspruch nimmt?

1voto

Thomas Maierhofer Punkte 2605

Dies hat nichts mit JIT-Kompilierung zu tun. Der normale C#-Compiler kompiliert Ihren Code hinter Dateien (.aspx.cs) in eine Zwischensprache in eine Assembly beim Start, wenn diese Assembly nicht existiert oder Codedateien geändert wurden. Ihre Website-Assembly befindet sich im Ordner "bin" auf Ihrer Website.

Tatsächlich erfolgt die JIT-Kompilierung erst danach, aber das geht sehr schnell und dauert nicht mehrere Minuten. Die JIT-Kompilierung erfolgt bei jedem Start einer .net-Anwendung, und das dauert nicht länger als ein paar Sekunden.

Sie können das Kopieren Ihrer Website vermeiden, wenn Sie die bereits kompilierte Website-Assembly (YourWebsite.dll) im bin-Ordner bereitstellen. Es ist auch möglich, nur die aspx-Dateien bereitzustellen und die Code Behind-Dateien (aspx.cs) wegzulassen.

1 Stimmen

Selbst bei einer vorkompilierten Website werden die .aspx, .ascx usw. in C#-Code geparst, kompiliert und dann ebenfalls JIT-kompiliert. Es gibt also eine ganze Menge Aktivität, wenn eine ASP.NET-Anwendung zum ersten Mal aufgewärmt wird.

0voto

RikRak Punkte 859

Ich habe gerade mit einem ähnlichen Problem gekämpft. Bei mir stellte sich heraus, dass ich die interne Protokollierung für NLog aktiviert hatte. Das hat die Startzeit um etwa 3 Minuten verlängert!

Original-Konfiguration

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      throwExceptions="false" throwConfigExceptions="false"
      internalLogLevel="Debug"
      internalLogFile="C:\Temp\NLog.Internal.txt">

Feste Konfig.

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      throwExceptions="false" throwConfigExceptions="false">

Zur Info: Ich habe dies mit Hilfe von SysInternals' ProcMon.exe entdeckt, indem ich nach dem Prozessnamen "w3wp.exe" gefiltert habe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X