Frage

Auf meinem Rechner (XP, 64) der ASP.net-Arbeitsprozess (w3wp.exe) startet immer mit 5.5GB virtuellem Speicher reserviert. Dies geschieht unabhängig von der Webanwendung es Hosting (es kann alles, sogar eine leere Webseite in aspx sein).

Dieser große alte Brocken des virtuellen Speichers im Moment reserviert ist der Prozess beginnt, so ist dies nicht ein allmähliches Gedächtnis „Leck“ von einer Art.

Einige Schnüffelei mit windbg zeigt, dass die Speicher Frage ist, ist privat, reserviert und RegionUsageIsVAD, das es die Arbeit von jemand ruft VirtualAlloc möglicherweise anzeigt. Es zeigt auch, dass der Speicher in Frage zuzugeordnet / reserviert in 4 großen Stücken von 1 GB je und einem mehr kleineren (1/4 GB pro Stück).

Also ich denke, ich brauche, um herauszufinden, wer VirtualAlloc ruft und alle diese Speicher zu reservieren. Wie kann ich das tun?

einen Debugger an den Prozess vor der Speicherzuweisung Anbringen ist heikel, weil w3wp.exe ein Prozess svchost.exe gestartet ist (das heißt, IIS / ASP.Net-Filter) und wenn ich versuche, es zu starten, um mich zu debuggen es schließt nur ohne alle diese reichlich Speicherreservierung nach unten. Außerdem sind die Befehlszeilenparameter ungültig, wenn ich sie resuse (was Sinn macht, da es sich um ein Rohr durch den anrufenden Prozess erstellt ist).

kann ich verbinden Sie es mit dem Verfahren nach der Tat Windbg (das ist, wie ich die Speicherbereiche in Frage gefunden), aber ich bin nicht sicher, dass es zu diesem Zeitpunkt möglich ist, zu bestimmen, wer zugeordnet, was.

War es hilfreich?

Lösung

David Wang beantwortet diese auf eine ähnliche Frage :

  

[...] der Entwickler ASP.Net Leistung sagt mir, dass:

     
      
  • Die reservierten virtuellen Speicher ist nichts zu befürchten. Sie können anzeigen   es als Leistung / Caching Voraussetzung   der CLR. Und Schwerlasttests   zeigt, dass es nichts zu befürchten   Über.
  •   
  • System.Windows.Forms - Es ist nicht in durch leere Hallo Welt ASPX gezogen   Seite. Sie können Microsoft Debugging verwenden   Werkzeuge und „sx e ld   System.Windows.Forms“zu erkennen, was   zieht es tatsächlich zur Laufzeit in.   Oder Sie können ildasm die finden   Abhängigkeit.
  •   
  • mscorlib - stellen Sie sicher, dass es GAC'd und NGen'd ist richtig
  • .   

Andere Tipps

Der virtuelle Speicher ist nur der Adressraum des Prozesses zugeordnet. Es hat nichts mit der Speichernutzung zu tun.

Siehe auch:

  1. Virtueller Speicher
  2. sind die Grenzen von Windows: Virtueller Speicher
  3. http://support.microsoft.com/kb/555223

Reserviert Speicher sind sehr verschieden von zugewiesen Speichern. Reservieren von Speicher reserviert nur Adressraum. Es werden keine physischen Seiten begehen.

Dieser Adressraum ist wahrscheinlich für seine Haufen von IIS zugeordnet. Es wird nur Seiten begehen, wenn nötig.

Wenn Sie wirklich wollen w3wp.exe von windbg zu starten, müssen Sie wahrscheinlich um es starten mit gültigen Befehlszeilenargumenten. Sie können Process Explorer , um zu bestimmen, was die Befehlszeile für die aktuelle Verwendung w3wp.exe Prozess. Zum Beispiel auf meinem Server, ich war:

  

. C: \ windows \ system32 \ inetsrv \ w3wp.exe -a \ \ pipe \ iisipmeca56ca2-3a28-452a-9ad3-9e3da7b7c765 -t 20 -AP "DefaultAppPool"

Ich bin mir nicht sicher, was die UID dort gibt an, aber es sieht es wohl im laufenden Betrieb durch den W3SVC-Dienst generiert wird (das ist, was w3wp.exe gestartet), um das Rohr dort angegeben zu nennen. So sollten Sie auf jeden Fall auf der Kommandozeile sehen vor dem Start w3wp von windbg.

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