7 Stimmen

Heap-Speicher-Probleme

Es gibt einen selbst gehosteten WCF-Dienst, der in 99 % der Fälle funktionieren muss. Manchmal haben wir einige Speicher Probleme wie diese:

memory leaks

Aber der Dienst funktioniert nach diesen Problemen wie gewohnt. Wie können wir das in den Griff bekommen? Jegliche Tipps und Hinweise zur Erstellung robuster Dienste, die in verschiedenen Ausnahmesituationen überleben können, sind sehr willkommen.

3voto

CharithJ Punkte 44196

Ich bin mir nicht ganz sicher, wo das Problem liegt, aber ein Speicherleck kann ein Grund sein.

Der gesamte Code wird verwaltet. Und wir verwenden dotConnec Datenschicht-Bibliothek.

Sie gehen davon aus, dass der gesamte Code verwaltet wird, aber es kann auch nicht verwaltete Teile geben. Sie müssen jedoch die Dispose-Methode für alle Wegwerfobjekte aufrufen, nachdem Sie sie verwendet haben, und nicht glauben, dass sie ordnungsgemäß entsorgt werden, sobald sie den Anwendungsbereich verlassen haben. Die beste Praxis ist, Disposable-Objekte nicht aus dem Anwendungsbereich gehen zu lassen, ohne ihre Dispose-Methode aufzurufen. Möglicherweise können Sie "using"-Anweisungen verwenden, wenn Sie sie als lokale Variablen verwenden.

DbConnection ist ein gutes Beispiel für Wegwerfobjekte, stellen Sie sicher, dass Sie alle Verbindungen (Wegwerfobjekte) entsorgen.

0voto

Simon Mourier Punkte 122836

Wenn es ein WCF-Problem ist (ich bin nicht sicher, was mit Ihrem Dump zu tun), schlage ich vor, dass Sie WCF-Server-seitige Verfolgung aktivieren, und werfen Sie einen Blick auf die Ausnahmen, wenn es irgendwelche gibt (und bearbeiten Sie Ihre Frage, damit wir Ihnen weiter helfen können).

Hier ist ein Link, der erklärt, wie man das macht:

Aktivieren der WCF-Nachverfolgung

0voto

Wegged Punkte 2335

Was sind Ihre Service-Verhaltensweisen, insbesondere ConcurrencyMode und InstanceContextMode.

wenn Sie Multiple als ConcurrencyMode und InstanceContext auf (PerCall oder PerSession (Standard)) eingestellt haben, können Sie definitiv in Probleme geraten, wenn Sie große DataStructures oder nicht verfügbare Ressourcen haben.

wenn Sie mehrere Gleichzeitigkeiten verwenden versuchen Sie InstanceContextMode Single [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)]

0voto

Esteban Araya Punkte 28454

Sind Sie zu 100 % sicher, dass keine Ihrer Abhängigkeiten nicht verwalteten Code enthält? Ich habe etwas sehr Ähnliches erlebt, und es passierte, weil wir Speicher freigesetzt haben, den ein anderer Prozess später ebenfalls freizugeben versucht hat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X