Ungewöhnliche Müllsammlungsmuster

9

Ich sehe einige ungewöhnliche Garbage-Collection-Muster unter .net 4.0, die ich nicht erklären kann, jeder Rat wäre willkommen.

Zu verschiedenen Zeiten während der Ausführung meines Programms beginnt die Anzahl der G2-Aufnahmen zu steigen und die GC% -Zeit geht auf nahezu 100%. Dies wird für einige Zeit fortgesetzt, bevor Sie anhalten (siehe unten unter Systemmonitor). Während dieser Zeit zeigt eine PerfView-Ablaufverfolgung der CLR GC ETW-Ereignisse, dass eine Reihe von lange laufenden G2-Sammlungen mit dem Grund 'AllocSmall' nacheinander ausgelöst werden.

Kann jemand etwas Licht auf etwas werfen:

  1. Preciously was verursacht ein "AllocSmall" -Ereignis
  2. Warum diese die G2-Sammlung direkt auslösen
  3. Warum diese G2-Sammlungen nacheinander auftreten

LowMemory scheint nicht das Problem zu sein, da die GC-Start-Ereignisse dies nicht als ihren Ursachencode enthalten ( Ссылка ). Wir haben auch ähnliche Situationen gesehen, in denen G0-Sammlungen Rücken an Rücken auftreten.

Bearbeiten: Es wurde vorgeschlagen, dass der Schwellenwert überschritten werden könnte. Angesichts der Tatsache, dass noch Speicher verfügbar ist, würde ich erwarten, dass der G2-Heap zu diesem Zeitpunkt erweitert wird, anstatt dass der GC-Thrash versucht, zu sammeln.

Bearbeiten: Die unten angegebenen Bilder haben eine viel höhere Auflösung als StackOverflow-Anzeigen - öffnen Sie einfach den Bild-Link direkt in einem Browser-Tab.

    
Simon Walker 08.02.2012, 16:20
quelle

1 Antwort

3

Gründe für das Sammeln von Abfällen treten auf:

  1. Das System verfügt über wenig physischen Speicher.

  2. Der Speicher, der von zugeordneten Objekten auf dem verwalteten Heap verwendet wird, überschreitet einen akzeptablen Schwellenwert. Dies bedeutet, dass ein Schwellenwert für die zulässige Speicherbelegung auf dem verwalteten Heap überschritten wurde. Dieser Schwellenwert wird während der Ausführung des Prozesses kontinuierlich angepasst.

  3. Die GC.Collect-Methode wird aufgerufen. In fast allen Fällen müssen Sie diese Methode nicht aufrufen, da der Garbage Collector kontinuierlich ausgeführt wird. Diese Methode wird hauptsächlich für einmalige Situationen und Tests verwendet.

Sieht so aus, als wäre # 2 der Fall, dh Sie haben einen akzeptablen Schwellenwert überschritten. +1 für Microsoft Vagheit.

    
Abdul Hfuda 08.02.2012 17:25
quelle