OutOfMemoryException, wenn viel Speicher verfügbar ist

Wir haben eine Anwendung, die auf 5 (Server-) Knoten (16 Kerne, je 128 GB Speicher) ausgeführt wird und auf jeder Maschine fast 70 GB Daten lädt. Diese Anwendung wird verteilt und dient gleichzeitigen Clients, daher wird eine Menge Sockets verwendet. In ähnlicher Weise werden für die Synchronisation zwischen mehreren Threads einige Synchronisationstechniken verwendet, die meistens @ verwendeSystem.Threading.Monitor.

Jetzt besteht das Problem darin, dass während die Anwendung ausgeführt wird und die Daten zwischen diesen Serverknoten und zwischen Clients und Servern übertragen werden, ein oder zwei Servercomputer mit dem Empfang von @ beginneOutOfMemoryException obwohl noch 40 +% Speicher verfügbar sind. Wir haben das Gefühl, dass diese Ausnahme von nicht verwaltetem Code herrührt. Obwohl wir keine nicht verwalteten Aufrufe direkt ausführen, haben wir festgestellt, dass der letzte Aufruf im OOM-Ausnahmestapel-Trace immer ein Framework-Aufruf ist, der nicht verwalteten Code intern aufruft.

achfolgend einige Beispiele.

Exception of type 'System.OutOfMemoryException' was thrown.
   at System.Threading.Monitor.ObjPulseAll(Object obj)
   ....

Exception of type 'System.OutOfMemoryException' was thrown.
   at System.Threading.Monitor.ObjWait(Boolean exitContext, Int32 millisecondsTimeout, Object obj)
   at System.Threading.Monitor.Wait(Object obj, TimeSpan timeout)
   ....

Wir sind hier ratlos, was dieses Problem verursacht. Wir haben mehrfach GC auf diesen Maschinen induziert, aber das scheint auch nicht zu helfen.

Jede Hilfe wäre dankbar ..

BEARBEITEN

Folgen sind einige weitere Details;

Application wird im x64-Prozess ausgeführt.Windows Server 2012 R2 .NET Framework 4.5Server GC aktiviertAllowLargeObject flag ist gesetzt.

EDIT2: Bitte beachten Sie, dass dies kein Speicherverlust ist. 70 GB Prozessgröße sind hier gültig.

Antworten auf die Frage(20)

Ihre Antwort auf die Frage