2016-07-06 15 views
0

Wir verwenden oracle jvm 1.8 64bit in Linux.Gibt es eine Befehlszeilenmethode, um einen JVM-Heap-Dump neben jmap zu erhalten?

Wir wissen jmap Jvm Heapdump bekommen:

jmap -F -dump:format=b,file=***filepath*** ***pid*** 

Aber es ist langsam.

Wir wissen, mit JVisualVM und JConsole Verbindung zu JMX kann auch einen Heap-Dump bekommen, und es ist sehr schnell. Aber sie sind mit GUI.

In unserer Produktumgebung gibt es jedoch keine GUI. Und keine Maschine mit GUI kann auf diese Umgebung zugreifen.

Also unsere Frage ist - Können JVisualVM und JConsole eine Befehlszeile zum Ausführen von Heap-Dump unterstützen? Oder Gibt es eine Befehlszeilenmethode, um einen JVM-Heap-Dump neben Jmap zu bekommen?

wir heute versuchen -

1, mit jvisualvm (remote JMX), können wir Haufen erfolgreich

2 Dump erhalten, jmap verwenden, ohne Option -F, die Dump fehlgeschlagen:

[root @ panda01 ~] # jmap -dump: format = b, file =/tmp/heapdump.31941.hprof 31941

31941: Kann nicht Socket-Datei öffnen: Zielprozess nicht reagiert nicht oder Hotspot VM geladen

Die Option -F kann verwendet werden, wenn der Zielprozess

3 nicht

reagiert, jmap mit -F-Option, die Dump erfolgreich, aber langsam:

[root @ panda01 ~] # jmap -F -dump: format = b, file =/tmp/heapdump.31941.hprof 31941

Anbringen ID 31941 zu verarbeiten, bitte warten ...

Debugger angebracht erfolgreich.

Server-Compiler erkannt.

JVM Version 25.92-b14

Haufen Dumping /tmp/heapdump.31941.hprof ...

Heap Dump-Datei erstellt

Und wir bemerken das Ergebnis (2 .hprof Dateien). Der Datei-Dump mit jvisualvm (erster Speicherauszug genannt) ist kleiner als der Dateispeicherauszug mit jmap -F (zweiter Speicherauszug genannt). Ansicht mit jvisualvm, die Anzahl und Größe der Instanz in der 1. Dump sind viel weniger als die in der 2. Dump.

Antwort

1

Verwenden Sie jmap ohne -F Option - es wird eine Möglichkeit schneller sein.

Der Unterschied ist in this answer beschrieben.

Beachten Sie, dass jmap ohne -F unter demselben Benutzer/derselben Gruppe wie der Zielprozess ausgeführt werden sollte.

+0

Danke! Ich habe es ohne -F vorher versucht. Es erzeugt jedoch manchmal keinen Heap-Dump. –

+0

@ForestSoup Der obige Link beschreibt auch die Gründe, warum jmap ohne -F nicht funktioniert. JMX-basiertes Dumping erfordert jedoch auch JVM-Kooperation. Wenn also JVM nicht reagiert, funktionieren weder Jmap noch JMX-basierte Speicherauszüge. – apangin

+0

Wir versuchten sowohl jmap mit/ohne -F und jvisualvm, die Unterschiede sind oben auf Frage eingefügt. @apangin, könnten Sie bitte noch einmal überprüfen und kommentieren? Vielen Dank! –