Wir haben einen 32-Bit-Windows-Dienst, der Speicher verliert - OutOfMemory Ausnahme wird ausgelöst. Es ist ausführbare .net 4.0-Datei auf Windows-Server 2003 ausgeführt. Beim Debugging von Crash-Dump-Dateien mit WinDbg, sehe ich, dass der größte Teil des Speichers tatsächlich reserviert und nicht verpflichtet ist. Kann reservierten Speicher verursachen eine Out of Memory-Ausnahme
Wie man es von WinDbg Screenshot sehen kann, gibt es 2,5 Gb unklassifizierter Speichernutzung, und das meiste davon 2,1 Gb ist eigentlich reservierten Speicher (MEM_RESERVE). Ich habe Erfahrung, Crush-Dumps zu debuggen, aber dieses Szenario ist etwas Neues für mich. MEM_COMMIT ist OK verlassen - 564,270 Mb, verwalteten Heap der Größe ca. 82 Mb ist
Ich habe auch einheimische Haufen zu sehen, wenn es große Brocken von Daten erhalten sind, konnte aber nichts Verdächtiges dort finden entweder
Also meine Frage ist - ist es möglich, dass MEM_RESERVED in OOM Ausnahme führen könnte? Wenn ja, wie kann ich es debuggen, warum/wie viel Speicher wird reserviert? Wo sonst würden Sie suchen, um herauszufinden, was das Problem sein könnte?
Wenn weitere Informationen erforderlich sind, bitte fragen Sie danach, und ich werde meine Post aktualisieren.
danke für die Antwort, wissen Sie vielleicht, wie kann ich sehen, was diese riesige Speicher in WinDbg reserviert? – Michael
Angenommen, der Speicher wird vom verwalteten Objekt verwendet, können Sie diese mit '! Dumpheap' und'! Do' überprüfen. Da jedoch die Ausgabe von '! Eeheap 'anzeigt, dass der gemanagte Heap klein ist, nehme ich an, dass etwas anderes diesen Speicher reserviert hat. –
Könnten Sie bitte angeben, was sonst Speicher reservieren kann? Ich bin verwirrt, weil ich erwarten würde, dass "etwas" entweder auf verwaltetem Heap oder einer nativen Ressource auf nativen Heaps ist - keines von beiden verweist auf verdächtige Dinge. Was sonst könnte Speicher reservieren? Ich wäre mehr als froh, es sofort zu überprüfen. – Michael