2009-06-04 9 views
34

Wenn ein Prozess abstürzt und einen Core-Dump erstellt oder ich einen mit gcore erstellen, wie kann ich dann analysieren?Wie analysiert man Informationen von einem Java Core Dump?

Ich würde gerne jmap, jstack, jstat usw. verwenden und auch Werte aller Variablen sehen können.

So kann ich die Gründe für eine abgestürzte oder eingefrorene JVM finden.

+0

Was ist ein Java-Core-Dump? Beziehen Sie sich auf den Stack-Trace der Anwendung oder ist der JVM-Absturz zu einem Core-Dump gekommen? –

+1

Könnten wir das in ein Wiki umwandeln? Dies ist keine Programmierfrage. Es ist jedoch sehr relevant für jeden Java-Programmierer auf Unix-Plattform. Der Wechsel zu software_rec .. ist eine andere Wahl. In jedem Fall bitte löschen Sie dies nicht. – Jayan

Antwort

0

IBM stellt eine Reihe von Tools zur Verfügung, die auch auf der Sun jvm verwendet werden können. Werfen Sie einen Blick auf einige der Projekte auf alphaworks, bieten sie einen Haufen und Thread-Dump-Analysatoren

Karl

0

Ich empfehle Ihnen Netbeans Profiler .Es hat eine reiche Reihe von Tools für die Echtzeit-Analyse zu versuchen. Tools von IbM sind einen Versuch für die Offline-Analyse wert

5

Sind Sie sicher, dass ein Core Dump ist, was Sie hier wollen? Das enthält die rohen Eingeweide der laufenden JVM und nicht die Java-Level-Informationen. Vielleicht ist ein JVM-Heap-Dump mehr, was Sie brauchen.

35

Okay, wenn Sie den Core-Dump mit Gcore oder Gdb erstellt haben, dann müssen Sie es in eine so genannte HPROF Datei konvertieren. Diese können von VisualVM, Netbeans oder Eclipse Memory Analyzer Tool (ehemals SAP Memory Analyzer) verwendet werden. Ich würde Eclipse MAT empfehlen.

Um die Datei zu konvertieren, verwenden Sie das Befehlszeilentool jmap.

# jmap -dump:format=b,file=dump.hprof /usr/bin/java core.1234 

wo:

dump.hprof ist der Name der Datei, die Sie Hprof

/usr/bin/java erstellen möchten ist der Pfad zu der Version des Java-Binärdatei, die generiert den Core Dump

core.1234 ist Ihre normale Kerndatei.

+0

Können wir eine jdk-1.4-Core-Dump-Datei, die mit gcore erzeugt wurde, in hprof auf Solaris mit jdk1.5/bin/jmap konvertieren? Ich habe versucht, mit dem obigen Befehl, aber es gibt den Fehler: Fehler beim Anhängen an Core-Datei: kann 'UseSharedSpaces' Flag – techzen

+0

Techzen nicht finden: Ich bin unsicher auf das ich fürchte .. sind Sie definitiv auf die ausführbare 1.4 Java-Datei auf die Befehlszeile? Wenn ja, dann könnte es sein, dass die 1.4 Core Dumps nicht kompatibel sind. – chillitom

+0

Ist es möglich, jmap zu verwenden, um eine mdmp-Datei zu konvertieren, die von JVM generiert wird, wenn sie abstürzt (http://docs.oracle.com/cd/E15289_01/doc.40/e15059/crash.htm)? – Greenhand

2

Eigentlich kann VisualVM Anwendung Core Dump verarbeiten.

Rufen Sie einfach "File/Add VM Coredump" auf und fügen Sie eine neue Anwendung in den Anwendungsexplorer ein. Sie können dann einen Thread-Dump oder einen Heap-Dump dieser JVM ausführen.

+0

Datei hinzufügen vm coredump Parsen ist ausgegraut für mich. Nicht sicher, warum genau – visch

+0

Wenn Sie auf Windows sind, wird es nicht unterstützt und wird leider ausgegraut. Ich bin im selben Boot. http://visualvm.java.net/coredumps.html Der Knoten Core Dump ist im Fenster Anwendungen sichtbar, wenn VisualVM unter Solaris oder Linux ausgeführt wird. –

6

Wenn Sie eine IBM JVM, download die IBM Themen-und Monitor-Dump Analyzer verwenden. Es ist ein ausgezeichnetes Werkzeug. Es bietet Thread-Details und kann auf Deadlocks usw. hinweisen. Die folgende blog post bietet einen schönen Überblick über die Verwendung.