Heim > Java > javaLernprogramm > Hauptteil

Java-Heap-Dump

WBOY
Freigeben: 2024-08-30 15:14:19
Original
775 Leute haben es durchsucht

In Java liefert ein Heap-Dump eine Momentaufnahme aller Objekte, die zu einem bestimmten Zeitpunkt im Speicher der Java Virtual Machine vorhanden sind. Heap-Dumps sind nützlich bei der Behebung von Speicherverlustproblemen und der Optimierung der Speichernutzung in verschiedenen Java-Anwendungen. Details zu jeder Instanz wie Adresse, Klassenname, Typ und Verweise auf ein anderes Objekt werden im Heap-Dump vermerkt. Heap Dump verfügt über zwei Formate, z. B. das Portable Heap Dump-Format, ein binäres und ein klassisches Format in ASCI-Text. In den folgenden Abschnitten sehen wir uns verschiedene Tools und Techniken zum Generieren eines Heap-Dumps an.

Starten Sie Ihren kostenlosen Softwareentwicklungskurs

Webentwicklung, Programmiersprachen, Softwaretests und andere

Heap-Dump-Formate

  • Portable Heap Dump (PHD)-Format: In diesem Format besteht die Dump-Datei aus einem Header-Abschnitt und einem Body-Abschnitt. Der Hauptteil der Dump-Datei enthält Details zu Objekten, Klassendatensätzen oder Arrays. Zur Erläuterung des Dateiformats werden Grundzahlen verwendet.
  • Klassisches Heap-Dump-Format: Diese Dump-Formate werden auf fast allen Plattformen in ASCII-Text generiert, außer z/OS, die in EBCDIC codiert sind.

Warum wird Heap Dump verwendet und wozu dient es?

Normalerweise wird dieser Heap-Dump verwendet, wenn die von uns verwendete Java-Anwendung mehr Speicher beansprucht als erwartet oder die Anwendung mit dem OutOfMemoryError abgestürzt ist. Wenn wir den Heap-Dump analysieren, hilft dies, die Grundursache der Anomalie zu identifizieren. Darüber hinaus kann Heap Dump auch verwendet werden, um Details wie die Speichernutzung jeder Klasse, die Anzahl der Objekte in jeder Klasse usw. zu identifizieren. Darüber hinaus können feine Details und die von einer Person belegte Speichermenge erfasst werden Das in der Anwendung vorhandene Java-Objekt kann ebenfalls ermittelt werden. Diese Informationen können uns helfen, den tatsächlichen Code zu identifizieren, der Speicherverlustprobleme verursacht.

Werkzeuge und Techniken

Hier sind die folgenden Tools und Techniken aufgeführt

1. JDK-Tools

Heap-Dumps können mit verschiedenen Tools unter JDK erfasst werden, die im bin-Ordner im Home-Verzeichnis von JDK verfügbar sind. Hierzu kann die Kommandozeile verwendet werden, da das Verzeichnis im Systempfad vorhanden ist.

jmap

jmap ist ein Tool, das sowohl in lokalen als auch in Remote-Prozessen verwendet werden kann, die Speicherstatistiken in einer laufenden JVM drucken.

Um einen Heap-Dump mit einer Jmap zu generieren, kann die Dump-Option wie unten gezeigt verwendet werden.

jmap -dump:[live] , format = b , file=< path of the file > <process id>
Nach dem Login kopieren
  • live: Optionaler Parameter. Wenn dies eingestellt ist, werden nur Objekte mit aktiven Referenzen gedruckt
  • format=b: Erwähnt, dass das Dump-Dateiformat im Binärformat vorliegen wird.
  • Datei: Die Datei, in die der erstellte Dump geschrieben werden kann
  • PID:Java-Prozess-ID
  • jcmd

jcmd ist ein Tool, das die Befehlsanfragen an die Java Virtual Machine sendet. Darüber hinaus muss dies auf der Maschine vorhanden sein, auf der der Java-Prozess ausgeführt wird.

Um den Heap-Dump zu erhalten, kann der Befehl GC.heap_dump verwendet werden, wobei nur die PID und der Dateipfad der Ausgabe angegeben werden müssen, wie unten gezeigt.

jcmd < pid > GC.heap_dump < path of the file >
Nach dem Login kopieren
JVisualVM

JVisualVM ist ein Tool mit einer einfachen und intuitiven grafischen Benutzeroberfläche, die uns die Überwachung, Fehlerbehebung und Profilierung von Java-Anwendungen ermöglicht. Um damit einen Heap-Dump zu generieren, muss der Java-Prozess mit der rechten Maustaste angeklickt und die Option „Heap-Dump“ ausgewählt werden. Sobald dies erledigt ist, erstellt das Tool einen Heap-Dump und dieser wird in einem neuen Tab geöffnet.

2. Automatische Erstellung eines Heap-Dumps

Anstatt wie oben erwähnt manuelle Techniken zu verwenden, wird eine Befehlszeilenoption, HeapDumpOnOutOfMemoryError, verwendet, um den Heap-Dump automatisch zu erstellen, wenn ein java.lang.OutOfMemoryError ausgelöst wird:

java - XX:+HeapDumpOnOutOfMemoryError
Nach dem Login kopieren

java_pid.hprof ist die Datei, die standardmäßig den Dump speichert und in dem Verzeichnis verfügbar ist, in dem die Anwendung ausgeführt wird.

Anstelle des Standardpfads können auch andere Dateipfade verwendet werden, und dafür kann die Option HeapDumpPath verwendet werden, wie unten gezeigt.

java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=< file_path >
Nach dem Login kopieren

Wenn die Anwendung also einen Speicherausfall auf diese Weise ausführt, können die Protokolle in der erstellten Datei angezeigt werden, die aus dem Heap-Dump besteht:

3. JMX

Hier wird das HotSpotDiagnostic MBean verwendet, das eine dumpHeap-Technik generiert, die 2 Parameter zulässt.

Sie sind:

outputFile, das ist der Dateipfad für den erstellten Dump. Stellen Sie sicher, dass die Datei die Erweiterung hprof.

haben sollte

live, das dem in jmap ähnelt. Wenn dies eingestellt ist, werden nur Objekte mit aktiven Referenzen gedruckt

Sehen wir uns zwei verschiedene Techniken an, um diese Methode zum Erfassen eines Heap-Dumps aufzurufen.

JConsole

JMX-Client wie JConsole ist die einfachste Möglichkeit, das HotSpotDiagnostic MBean zu verwenden. Wenn JConsole geöffnet und mit einem laufenden Java-Prozess verbunden ist, navigieren Sie zur Registerkarte MBeans und identifizieren Sie die HotSpotDiagnostic, die unter com.sun.management vorhanden ist. Innerhalb der Operationen ist die zuvor erläuterte dumpHeap-Methode zu finden. Zum Ausführen der dumpHeap-Operation werden die Parameter „outputFile“ und „live“ als Textfelder „p0“ und „p1“ verwendet.

Programmatische Methode

Ähnlich wie JConsole kann HotSpotDiagnostic MBean verwendet werden, indem es über ein Programm aus Java-Code aufgerufen wird. Dazu muss eine MBeanServer-Instanz ein MBean in der Anwendung registrieren. Sobald dies abgeschlossen ist, wird eine Instanz eines HotSpotDiagnosticMXBean benötigt und die dumpHeap-Methode dieser Instanz muss aufgerufen werden.

4. IBM Verwaltungskonsole

Angenommen, die von Ihnen verwendete Anwendung läuft auf IBM Websphere Application Server. Die Verwaltungskonsole kann Heaps generieren. Wählen Sie zunächst im Navigationsbereich der Verwaltungskonsole „Fehlerbehebung“ und dann „Java-Dumps und -Kerne“ aus. Sobald dies erledigt ist, wählen Sie den Servernamen für denjenigen aus, der den Heap-Dump erstellen soll. Klicken Sie anschließend auf Heap-Dump, um den Heap-Dump für den genannten Server zu erstellen. wsadmin kann auch zum Erstellen von Heap-Dumps verwendet werden.

Das obige ist der detaillierte Inhalt vonJava-Heap-Dump. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!