2009-08-05 3 views
1

Ich habe einen kleinen WCF-Dienst, der auf einer XP-Box mit 256 MB RAM in VM ausgeführt wird.aspnet_wp recycelt wegen des hohen Speicherverbrauchs. Wie kann ich es reparieren?

Wenn ich eine Anfrage (mit einer Anfrage Größe von ca. 5mbs) zu diesem Dienst ich die folgende Meldung im Ereignisprotokoll immer erhalten:

aspnet_wp.exe recycelt wurde, weil der Speicherverbrauch der 153 MB überschritten (60 Prozent des verfügbaren RAM).

und der Anruf wird mit Fehler 500

Ich habe versucht, Speichergrenze auf 95% zu erhöhen, aber es dauert noch alle verfügbaren Speicher und nicht auf die gleiche Weise.

Es sieht aus wie etwas mit meiner App ist falsch (ich nicht Byte [] Puffer und vielleicht etwas anderes), aber ich kann nicht finden Ursache für solche Speicherüberlastung.

Das Profiling hat gezeigt, dass alle CLR-Objekte, die ich gemeinsam im Speicher habe, nicht so viel Platz einnehmen.

Eine Dump-Analyse mit windbg zeigte die gleiche Situation - nichts so großes im Objekt-Heap.

Wie kann ich herausfinden, was zu einer solchen Speicherüberlastung beiträgt?

Gibt es eine Möglichkeit, einen Dump unmittelbar vor dem Recycling des Prozesses (während der maximalen Speicherbelegung) zu machen?

Antwort

2

Tess Ferrandez Blog "If broken it is, fix it you should" hat viele Hinweise, Tipps und Empfehlungen zum Aussortieren genau dieser Art von Problem.

Von besonderem Nutzen für Sie wäre Lab 3: Memory, wo sie Sie durch die Arbeit führt, was verursacht hat, dass der gesamte Speicher auf Ihrer Maschine verschwunden ist.

+0

Ich habe ziemlich viel gelernt mit Tess Walkthroughs und den Debug-Tools. Es ist definitiv Ihre Zeit wert. –

+0

Danke. Ich reparierte das nicht wirklich, da mir gesagt wurde, dass wir keine so schlechten Maschinen in Produktion haben und Speicher nicht auszulaufen scheint. Wie auch immer - Ich habe meinen eigenen MultiBufferMemoryStream implementiert, der IXmlSerializable implementiert: D –

1

Könnte eine Menge Dinge sein, schwer zu diagnostizieren. Haben Sie beobachtet, ob die Speicherbelegung bei Aspnet-Prozessen oder auf dem Server selbst am höchsten ist? 256MB ist ziemlich niedrig, aber es sollte immer noch in der Lage sein, damit umzugehen. Haben Sie eine SWAP-Datei auf diesem Computer? An welchem ​​Punkt nehmen Sie den Speicherabzug? Hast du den Code durchschritten und funktioniert das auf anderen Rechnern? Vielleicht steckt es in einer Schleife fest und verliert Speicher, bis es abstürzt?

Verwandte Themen