Frage

Oft fand ich OutOfMemoryException auf IBM Websphere Application Server. Ich denke, diese Ausnahme auftritt, weil meine Anwendung Huge Daten aus der Datenbank abgerufen werden. Also beschränke ich alle Abfrage keine Daten mehr als 1000 Datensätze retreive und setzen JVM von folgen WAS

+ Verbose garbage collection
+ Maximum Heap size = 1024 (RAM on my server is 16 GB and now I already change to 8192)
+ Debug arguments = -Djava.compiler=NONE -Xdebug -Xnoagent  
                    -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7777
+ Generic JVM arguments = -Dsun.rmi.dgc.server.gcInterval=60000 
                          -Dsun.rmi.dgc.client.gcInterval=60000 -Xdisableexplicitgc  
                          -Dws.log=E:\WebApp\log -Dws.log.level=debug
(ws.log and ws.log.level are my properties)

Und ich fand heapdump , javacore und Snap Dateien im Ordner Profile denke ich, dass sie mich über Ursache des Problems sagen kann, aber ich don‘ t wissen, wie man lesen / Verwendung heapdump, Javacore und Snap-Dateien.

Bitte sagen Sie mir, wie zu verhindern / vermeiden / fix OutOfMemoryException. Dank

War es hilfreich?

Lösung

Die Antwort auf diese ist abhängig von der Nachricht mit dem OutOfMemoryException verbunden. Sie können auch versuchen -XX:. MaxPermSize = ... und setzen Sie sich auf etwas größer wie 256m

Auch wenn Sie eine rekursive Funktion irgendwo, die einen Stapelüberlauf verursachen kann.

Wenn Sie können, schreiben Sie bitte die Nachricht mit der Ausnahme zugeordnet ist. Stacktrace könnte auch helfen.

Andere Tipps

Wenn Sie an den Heap Dump-Dateien suchen möchten, bietet IBM Tools sie hier .

„Danke für die Erinnerung“ über die JVMs Verwendung von Speicher ein guter Artikel ist, die dieses Problem analysieren helfen könnten ...

Dank bwalliser für diesen Link

Versuchen Sie, das Problem vor Ort zu reproduzieren, so dass Sie ein Tool wie JProfiler verwenden können, es zu debuggen. Auch wenn Sie nicht ein OOM lokal zwingen kann, die Chancen sind Sie die Speicher Erhöhung JProfiler sehen werden. Dann nehmen Sie Schnappschüsse und suchen Sie nach Klassen, die nicht werden Müll gesammelt. Es ist keine exakte Wissenschaft, aber es ist viel einfacher als die Suche durch einen IBM heapdump. Wenn Sie jedoch haben, die alte Art und Weise einen Heap Dump Prüfung war mit HeapRoots. Es kann auf der Version, die Sie auf sind abhängen. Ich weiß, dass einige Versionen von IBM JDK haben Probleme mit so auch Verdichten, wenn Sie genügend Speicher haben, können Sie eine OOM bekommen, weil es nicht ein ausreichend großes Fragment zur Verfügung.

Ich nehme an, Ihre Verwendung von Hibernate / JPA als Persistenz-Provider? Verwenden Sie einen Second Level Cache? Wenn ja haben Sie große Ergebnismengen aus dem Cache betrachtet evicting?

Die Frage ist schwer zu beantworten, wenn wir nicht wissen, was Art von OutOfMemoryError es ist; permgen und heapspace sind zwei sehr unterschiedliche Tiere.

Ich war eine Perm-gen für viele Monate auf JBoss jagen, obwohl das, dass bestimmte Art von Problem zu jedem Anwendungsserver allgemein war, die Web-Anwendungen im laufenden Betrieb neu geladen. Die Saga wird dokumentiert hier .

Die Heap-Dumps Sie haben ... könnte sein, dass man sie in Eclipse-MAT .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top