Bestimmen Sie, wer / was in w3wp.exe 5,5 GB virtuellen Speicher reserviert
-
21-08-2019 - |
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.
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:
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.