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
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 .
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.
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
Tags und Links java garbage-collection jboss