Auf meinem Computer (XP, 64) startet der ASP.net Worker-Prozess (w3wp.exe) immer mit 5.5 GB virtuellem Speicher reserviert. Dies geschieht unabhängig von der Webanwendung, die es hostet (es kann alles sein, sogar eine leere Webseite in aspx).Ermitteln, wer/was reserviert 5.5 GB virtueller Speicher in w3wp.exe
Dieser große alte Teil des virtuellen Speichers ist in dem Moment reserviert, in dem der Prozess beginnt, also ist dies kein allmähliches "Speicherleck" irgendeiner Art.
Einige herumschnüffeln mit windbg zeigt, dass die Speicherfrage ist Private, Reserved und RegionUsageIsVAD, was darauf hinweist, dass es die Arbeit von jemandem sein kann, der VirtualAlloc aufruft. Es zeigt auch, dass der betreffende Speicher in 4 großen Blöcken von jeweils 1 GB und mehreren kleineren (jeweils 1/4 GB) zugewiesen/reserviert ist.
Also ich denke, ich muss herausfinden, wer VirtualAlloc anruft und all diesen Speicher reserviert. Wie mache ich das?
Das Anhängen eines Debuggers an den Prozess vor der Speicherzuweisung ist schwierig, weil w3wp.exe ein Prozess ist, der von svchost.exe (dh IIS/ASP.Net-Filter) gestartet wird und wenn ich versuche, es selbst zu starten Um es zu debuggen, schließt es einfach ohne all diese umfangreiche Speicherreservierung. Außerdem sind die Befehlszeilenparameter ungültig, wenn ich sie erneut verwende (was sinnvoll ist, weil es sich um eine vom aufrufenden Prozess erstellte Pipe handelt).
Ich kann windbg es nach der Tatsache an den Prozess anhängen (so habe ich die Speicherbereiche in Frage), aber ich bin mir nicht sicher, es ist zu diesem Zeitpunkt möglich zu bestimmen, wer was zugewiesen.
Ich möchte nur sagen "Oh mein Gott" GeorgeTakei>! –
StingyJack
Das ist die erste relevante Verwendung des neuen Tags, den ich gesehen habe (natürlich außerhalb der Heroes-Seiten auf NBC.com)! –
Ich sehe das gleiche Verhalten auf Server 2008, IIS7 –