Ich habe eine JEE-Anwendung, die vor kurzem begonnen hat, Spitzen in der CPU-Nutzung zu sehen (z. B. 100% von 27 Kernen auf einem 40-Core-Server) und zunehmend längere Zeiträume Die Anwendung ist nicht verfügbar. Es ist sehr ähnliches Verhalten wie die Ausgabe in der folgenden Beitrag beschrieben, um die Tatsache zu schließen, dass der Anwendungsserver Prellen die Frage gehen weg macht, bis es wieder nach ein paar Stunden erscheint:JVM YoungGen 0%, Perm Gen 99%, OldGen Full
Old Gen heap is full and the Eden and Survivor are low and almost empty
ich einige genommen haben Core-Dump-Ausgänge, während die Anwendung dieses „friert“ erlebt, und ich bin die folgende JVM GC Ausgabe zu sehen:
PSYoungGen total 11221504K, used 2435K
eden space 9238528K, 0% used
from space 19829796K, 0% used
to space 1970176K, 0% used
ParOldGen total 39613440K, used 39276477K
object space 39613440K, 99% used
PSPermGen total 254976K, used 115497K
object space 254976K, 45% used
Basierend auf der referenzierten Post und die Ausgabe oben, ich glaube, ich verstehe, dass die „friert“ werden angetrieben durch den Müllsammler, der (umsonst?) auf dem ParOldGen-Raum läuft. Die Teile, die ich vermisse:
Warum der PermGen Raum bei 45% bleibt verwendet. Das heißt, werden die ~ 39 GB Dinge in ParOldGen letztlich in PSPermGen übergehen?
Was ist die Bedeutung des fast leeren PSYoungGen-Raums? Bedeutet das, dass die Anwendung im Steady-State keine/viele neue Objektinstanzen erzeugt?
Der Beitrag oben beschrieben, auch die Möglichkeit, zu ParOldGen „mehr Spielraum zu geben“, aber ich bin nicht klar, ob das bedeutet, dass die Gesamtspeichergröße über -Xmx erhöht oder wenn es ein expliziten JVM GC-Parameter. Ich sehe das Argument NewRatio
steuert die Größe der jungen Generation im Vergleich zur alten Generation. Würde die Tatsache, dass das PSYoungGen im Wesentlichen leer ist, bedeuten, dass es zu groß ist, und dass ich einen kleineren NewRatio
Wert verwenden sollte?
Vielen Dank im Voraus für jede Hilfe.
Sachen aus alten gen zu permgn Raum nicht befördert zu werden, haben Sie wahrscheinlich ein Leck irgendwo in Permgen, erstellt Ihre App viele Klassen dynamisch? –
Vielen Dank für Ihren Kommentar. Ich verstehe jetzt, dass Permgen Raum ist nicht Teil des Heaps (per http://stackoverflow.com/questions/2129044/java-heap-terminology-young-old-and-permanent-generationen ). Die App erstellt viele Klassen dynamisch. Offenbar haben wir entweder ein Speicherleck oder die Speicheranforderungen der App überschreiten den aktuellen Wert von -Xmx. –
Sie erstellen dynamisch viele Klassen oder Objekte? Wenn Klassen dann Ihre Permgen voll werden, wenn Objekte dann altgen. –