Welches Plug-In für Profiling?

Hallo zusammen,

wir haben eine Eclipse-RCP-Anwendung, wenn man dort bestimmte Daten lädt, steigt die Anwendung mit einem OutOfMemoryFehler aus. Um zu ermitteln wann genau das Problem auftaucht, wollten wir es mal mit einem Profiling-Tool versuchen.

Im Eclipse-Marketplace sind 26 solcher Tools verfügbar.

Hab mir gerade JVM Monitor 3.8.1 installiert. Auf dem ersten Blick schaut es gut aus. Insgesamt 4 Timelines für Used Heap Memory, Thread Count, Loaded Class Count und CPU Usage.

Vielleicht hat ja jemand von euch schon mit dem einen oder anderen Tool gearbeitet und kann Vor- und Nachteile kurz auflisten?

Ist zwar nicht 100% on topic, aber ich arbeite, wenn ich Profiling mache, mit VisualVM ohne IDE-Integration.
Bei Analysen von Heap-Dumps um Speicherfresser zu identifizieren hilft mir der Memory Analyzer MAT.

*** Edit ***

Ach so, um den relevanten Heap-Dump zu bekommen, kannst du eine JVM-Option (-XX:+HeapDumpOnOutOfMemoryError) aktivieren. Dann wird beim Absturz ein Heap-Dump erzeugt, den du mit MAT analysieren kannst.
Quelle für den Parameter:
profiling - Java VisualVM Enable Heap Dump on OOME - Stack Overflow

*** Edit ***

Wenn VisualVM parallel läuft, kannst du dort die Erzeugung des Heap-Dump bei OOME auch nachträglich aktivieren. (Rechtsklick auf die Anwendung -> Enable Heap Dump on OOME)

simples Projekt zum visualisieren/analysieren: https://github.com/Cetrea/stardust

[ot]Die haben in der Readme nicht wirklich thread- und heapdump verwechselt, oder?

little dirty parser for Java thread dumps
[/ot]
Edit: ne, scheinbar wird da wirklich nur der threaddump analysiert.

ich hätte schon lieber ein Eclipse-Plugin. Möchtet nicht dauernd neu bauen um den Effekt von Änderungen zu sehen.

Ein Kollege hat jetzt auf Verdacht einfach mal den Speicher für JVM hoch gesetzt, das reicht jetzt auch für ein konkretes beispiel, aber für dei Zukunft weiß das natürlich niemand.

Ob die Anwendung von Eclipse gestartet wird, ist VisualVM egal. Außerdem kann man doch meines Wissens nach in Eclipse auch JVM-Argumente übergeben, sodass der Heap-Dump gespeichert wird.

Okay, dann schau ich mir das doch nochmal genauer an.

Weitere Meinungen und Vorschläge weiterhin willkommen :slight_smile:

generell ist schonmal die Frage, ob es eine gewisses Muster gibt bei den Daten die den Absturz bringen… also wenn man immer 5Gb reinlaedt ist dies zb eindeutig ein Hinweis :slight_smile:

Wie gut es sich in RCP einschmiegt, weiß ich nicht, aber http://forum.byte-welt.net/java-forum/allgemeine-themen/15932-java-mission-control.html hatte ich zuletzt mal ausprobiert, und es scheint schon SEHR mächtig zu sein (dagegen wirkt die jVisualVM wie ein BobbyCar gegenüber einem Rolls Royce :eek: )