Seit Jahren führen wir Java-Dienste mit bescheidenen Heap-Größen unter Verwendung von +UseParallelOldGC
. Jetzt beginnen wir mit der Einführung eines neuen Service mit einem größeren Heap und dem G1-Collector. Das läuft ziemlich gut.Java G1: Überwachung auf Speicherlecks in der Produktion
Für unsere Dienste, die +UseParallelOldGC
verwenden, überwachen wir auf Speicherlecks, indem wir die alte Generationsgröße nach der Erfassung betrachten und auf einen Schwellenwert aufmerksam machen. Das funktioniert ganz gut und hat unseren Speck erst vor zwei Wochen gerettet.
Speziell für +UseParallelOldGC
, tun wir folgendes:
ManagementFactory.getMemoryPoolMXBeans()
- Suche nach dem
MemoryPoolMXBean
Ergebnis mit dem Namen - Vergleichen
getCollectionUsage().getUsed()
(falls vorhanden) mitgetMax()
"Old Gen"
endend
Leider scheint G1 kein Konzept mehr von 012 zu haben.
Grundsätzlich möchten wir jedoch die G1-Heap-Größe nach der letzten gemischten Sammlung in einem gemischten Zyklus oder etwas Ähnlichem überwachen.
Zum Beispiel außerhalb des VM ich mit einem awk-Skript glücklich sein würde, die lediglich die letzten '(mixed)'
wurde gefunden, dass durch ein '(young)'
gefolgt ist und schauen, was die endgültige Heap-Größe war (zB '1540.0M' 'Heap: 3694.5M(9216.0M)->1540.0M(9216.0M)'
)
Gibt es ein Möglichkeit, dies innerhalb der Java VM zu tun?
Dies sollte ähnliche Informationen bereitstellen: http://StackOverflow.com/a/ 32509813/1362755 – the8472