it-swarm.com.de

GC-Overhead-Limit überschritten

Welche Abtastzeit verwendet JVM, um 'Java.lang.OutOfMemoryError: GC-Overhead-Limit überschritten' auszulösen? Ich weiß, dass Sie 98% und 2% mit den Parametern GCTimeLimit und GCHeapFreeLimit steuern können, aber was ist die Abtastzeit?

93
PRK

Von Garbage Collection-Optimierung für Java SE 6 HotSpot [tm] Virtual Machine

folgende

Übermäßige GC-Zeit und OutOfMemoryError

Der gleichzeitige Collector löst einen OutOfMemoryError aus, wenn zu viel Zeit für die Garbage Collection aufgewendet wird: Wenn mehr als 98% der Gesamtzeit für die Garbage Collection aufgewendet werden und weniger als 2% des Heaps wiederhergestellt werden, wird ein OutOfMemoryError ausgelöst. Mit dieser Funktion soll verhindert werden, dass Anwendungen über einen längeren Zeitraum ausgeführt werden, während nur geringe oder gar keine Fortschritte erzielt werden, da der Heap zu klein ist. Bei Bedarf kann diese Funktion durch Hinzufügen der Option -XX: -UseGCOverheadLimit zur Befehlszeile deaktiviert werden.

Die Richtlinie ist mit der Richtlinie im parallelen Kollektor identisch, mit der Ausnahme, dass die Zeit, die für die gleichzeitige Erfassung aufgewendet wird, nicht auf das 98% -Zeitlimit angerechnet wird. Mit anderen Worten, nur Sammlungen, die durchgeführt werden, während die Anwendung gestoppt ist, zählen zu einer übermäßigen GC-Zeit. Solche Sammlungen sind typischerweise auf einen gleichzeitigen Modusfehler oder eine explizite Sammlungsanforderung (z. B. einen Aufruf von System.gc ()) zurückzuführen.

in Verbindung mit einer Passage weiter unten

Eine der am häufigsten vorkommenden Verwendungen der expliziten Garbage Collection tritt bei RMIs Distributed Garbage Collection (DGC) auf. Anwendungen, die RMI verwenden, verweisen auf Objekte in anderen virtuellen Maschinen. In diesen verteilten Anwendungen kann kein Datenmüll gesammelt werden, ohne gelegentlich den lokalen Heap zu sammeln. Daher erzwingt RMI in regelmäßigen Abständen vollständige Sammlungen. Die Häufigkeit dieser Sammlungen kann über Eigenschaften gesteuert werden. Beispielsweise,

Java -Dsun.rmi.dgc.client.gcInterval=3600000

-Dsun.rmi.dgc.server.gcInterval=3600000 gibt die explizite Erfassung einmal pro Stunde anstelle der Standardrate von einmal pro Minute an. Dies kann jedoch auch dazu führen, dass die Wiederherstellung einiger Objekte viel länger dauert. Diese Eigenschaften können auf Long.MAX_VALUE festgelegt werden, um die Zeit zwischen expliziten Auflistungen praktisch unbegrenzt zu machen, wenn keine Obergrenze für die Aktualität der DGC-Aktivität erforderlich ist.

Anscheinend ist der Auswertungszeitraum für die Ermittlung der 98% eine Minute lang, er kann jedoch in der JVM von Sun mit der richtigen Definition konfiguriert werden.

Natürlich sind auch andere Interpretationen möglich.

82
Edwin Buck