Meine App läuft ständig Full GC!

8

Ich bin ein Neuling bei Performance-Tuning-Anwendungen und erkläre die Funktionsweise von GC und stelle damit wahrscheinlich die gleiche Frage ein millionstes Mal!

Das Problem ist, dass vor zwei bis drei Wochen irgendwo irgendwo meine Webanwendung abstürzte. Betrachtet man die Protokolle, wurde daraus abgeleitet, dass es aufgrund von OOM-Fehlern abstürzt:

%Vor%

und

%Vor%

Anschließend habe ich mit der Protokollierung von GC-Protokollen begonnen und festgestellt, dass beim Starten des Servers zunächst GC ordnungsgemäß ausgeführt wird:

%Vor%

Bei der Überprüfung von Protokollen am nächsten Tag werden in den GC-Protokollen jedoch immer vollständige GCs angezeigt:

%Vor%

Ist es meine App, die Speicher verliert oder ist es meine Konfiguration, die fein abgestimmt werden sollte? Ich verwende das folgende Setup:

%Vor%

Der folgende Befehl wird verwendet, um jboss auszuführen:

%Vor%

Jede Hilfe wird sehr geschätzt. Auch jedes Licht zur Analyse von GC / Heap Dumps wäre für mich in Zukunft eine große Hilfe.

Mit freundlichen Grüßen,
Sumit Taneja

    
Sumit 08.03.2011, 06:22
quelle

3 Antworten

3

Das Ausführen mit 4 GB RAM und die Verwendung von -Xmx1024m (maximale Anzahl von Java Heap 1024M) ist möglicherweise nicht beabsichtigt.

Auf der anderen Seite sieht es so aus, als ob Ihre Abfrage zu viele Ergebnisse liefert, entweder wegen der Joins oder der Verwendung von null limit, was zu einer übergroßen Liste wird.

Sie könnten damit beginnen, einen Heap-Snapshot in der Mitte von GCs mit

aufzunehmen %Vor%

Und dann den oben erwähnten Memory Analyzer .

    
David Lantos 08.03.2011, 07:54
quelle
3

Eclipse enthält ein großartiges Tool namens Memory Analyzer. Es kann genau jene Heap-Dumps analysieren, die Sie in OOM generieren. Es zeichnet ziemlich gute Diagramme, die Ihnen dabei helfen, einzuschränken, wo der Hauptteil Ihres Speicherverbrauchs liegt - Ihre App, jboss, andere Teile Ihres Setups - bis auf ein sehr feines Niveau.

Wenn Sie hier die Ausgabe einfügen, könnten wir Ihr Problem weiter untersuchen.

    
pnt 08.03.2011 06:32
quelle
0
%Vor%

Exzessive GC-Zeit und OutOfMemoryError

  

Der parallele Kollektor wirft ein   OutOfMemoryError wenn zu viel Zeit ist   in Müllabfuhr verbracht werden: wenn   mehr als 98% der Gesamtzeit ist   verbrachte in der Müllsammlung und weniger   als 2% des Heaps gewonnen werden, a   OutOfMemoryError wird ausgelöst. Dies   Feature soll verhindern   Anwendungen laufen für eine   längere Zeit während der Herstellung   wenig oder kein Fortschritt, weil der Haufen   es ist zu klein. Wenn nötig, dies   Feature kann durch Hinzufügen der deaktiviert werden   Option -XX: -UseGCOverheadLimit auf die   Befehlszeile

    
Dead Programmer 08.03.2011 06:36
quelle

Tags und Links