JMAP und JStack für Anfänger

JMAP und JStack für Anfänger
JMAP und JSTACK sind wahrscheinlich die wertvollsten Dienstprogramme in der Toolbox eines Java -Entwicklers. Mit der Funktionalität beider Tools kombiniert können Sie Probleme debuggen und Diagnostik für das Java -Programm ausführen, das Sie codieren. Als grundlegendste Paar von Debugging -Tools ist es wichtig, dass Sie wissen, wie man mit ihnen arbeitet.

Dies wird ein Tutorial über JMAP- und JStack -Dienstprogramme in Java für Anfänger sein. Wenn Sie mit diesem Tutorial fertig sind, haben Sie eine bessere Vorstellung davon, wie diese beiden Tools Ihnen bei der Fehlerbehebung und Debugging helfen können.

Diagnostik mit JStack ausführen

JStack ist im Wesentlichen ein Befehlszeilendienstprogramm zur Fehlerbehebung. Mit JStack können Sie die Thread -Dumps für bestimmte Programme, Prozesse oder Java -Kerndateien angezeigt haben, um die Probleme zu identifizieren. Dies enthält wiederum weitere Details wie den vollständigen Klassennamen, den Namen der Methode, die Zeilennummer des Elements und den Bytecode -Index. Mit JStack können Sie erkennen, welche Aktion jede Codezeile beim Ausführen des Programms ausführt.

Ausführen von Diagnostik ist das, wofür das JSPACK -Dienstprogramm am häufigsten verwendet wird. Sie wenden den Befehl jStack auf eine bestimmte Kerndatei/ einen bestimmten Kerndatei/ einen bestimmten Thread an, der mit dem JVM (interner VM -Threads) sowie den Original -Stack -Frames verknüpft ist. Darüber hinaus kann JStack auch Ressourcenverbrauchsüberlappungen (Deadlocks) identifizieren, um das Programm zu beheben. Diese Funktionen ermöglichen es den Benutzern, sich auf ein anderes Dienstprogramm zu verlassen, um eine vollständige Diagnose durchzuführen, um Fehler oder Fehler im Programm zu beseitigen.

Fahren Sie einen Stack -Müllkippe

Wenn ein Programm nicht mehr reagiert oder wenn ein Prozess festsitz. Es ist besonders nützlich, wenn der JStack ProcessID ebenfalls nicht mehr reagiert, sodass Sie den -F -Switch zu Ihrem Vorteil verwenden können.

Eine typische Stack -Müllkippe sollte dem folgenden Inhalt ähneln:

Rufen Sie Spuren von Kern -Müllkopien ab

Wenn Sie mit Kern -Dumps nicht vertraut sind, handelt es sich um Speichermülldeponien, die ein Protokoll für Dateien oder Programme führen und ihre Inhalte und ihren Zustand zu einem bestimmten Zeitpunkt dokumentieren, normalerweise, wenn ein Problem einen beispiellosen Absturz erleidet. Kernmüllkopien sind in Bezug auf die Inhalte, die sie halten können, ziemlich flexibel und können für bestimmte Anwendungen sehr detailliert gemacht werden.

Geben Sie den folgenden Befehl ein: Um die Stapelspuren aus einem Kern -Müllkippe zu extrahieren:

$ Jstack $ java_home/bin/java core

Gemischter Stapel

Oft stoßen Sie auf Fehler, die zu groß sind, um allein mit Java -Stapeln identifiziert zu werden. Hier müssen Sie die nativen Stapelrahmen hochziehen und diejenigen mit den Java -Stapeln sehen. Die nativen Frames werden unter Verwendung der C/C ++ - Sprache erzeugt, und diese können ein Lebensretter sein, wenn es um die Ausführung von Diagnostik geht.

Verwenden Sie den Befehl -m, um die nativen Stapel zu drucken, wie unten dargestellt:


Identifizierung von Lecks mit JMAP -Dienstprogramm

Als aufstrebender Java -Entwickler (ich gehe davon aus, dass Sie noch ein Anfänger sind, warum sonst würden Sie in einem JMAP -Tutorial sein?) Sie werden viel häufiger Diagnostik ausführen, als Sie vielleicht erkennen mögen. Die Probleme können die Form der Überfüllung des Gedächtnisses annehmen und sich als kontinuierlich ansammelnden Haufen manifestieren, der nicht so einfach verschwindet, oder vielleicht als Verzögerung bei der Veröffentlichung einer Arrayliste.

Um diese Offsets auszugleichen, identifizieren Sie diese Lecks zuerst, bevor Sie daran arbeiten, sie zu beheben. Das leistungsstärkste Tool, das Sie in dieser Hinsicht zur Verfügung haben, ist das JMAP -Dienstprogramm. Das JMAP -Dienstprogramm lindert das Problem, indem er die Größe und den Status des akkumulierenden Haufens aufzeichnet.

So verwenden Sie den Befehl JMAP, wenn Sie die Lecks auswählen.

-Haufen Befehl

Der Befehl -HEAP enthält detaillierte Informationen zum Heap. Beispielsweise können Sie Informationen zu den GC -Algorithmen erwerben und die Einzelheiten zu jedem Thread anschließen, der an einem seiner Prozesse beteiligt ist. Sie können auch die Haufensnutzungsberichte und in einigen feinen Details sehen. JMAP enthält Informationen zur Wärmekapazität und derzeit verfügbaren Speicher, wenn er aufgefordert wird, Heap -Berichte zu generieren.

Haufen Histogramm

Um die Berichte, die JMAP vorgestellt hat, besser zu visualisieren, kann ein Histogramm erstellt werden. Zu diesem Zweck haben Sie die Option -histo, die das Histogramm für eine Java -Prozessor -Kerndatei druckt. Wenn Sie auf einen Laufprozess angewendet werden, sehen Sie die Speichergröße in Bytes, wie viele Objekte sie besetzen, mit ihren Klassennamen.

$ JMAP -histo \/java/re/javase/6/letztes/binärdien/solaris -sparc/bin/java core.27421

Bevor wir abschließen:

Wir müssen darüber sprechen Statistik für permanente Generation. In Java ist die dauerhafte Generation ein Teil des Haufens, der die gesamte virtuelle Maschine enthält. Unter anderem enthält es Details über die Methoden- und Klassenobjekte. Diese Details umfassen die genaue Anzahl der Klassen, die Anzahl der Bytes im Service für jeden Klassenlader, die Adresse des Klassenladers sowie die Adresse des übergeordneten Klassenladers und ein Hinweis darauf, ob das Programm aufbewahrt oder an den Müll gesendet wird Sammlung später.

Zusammenfassend

Nachdem Sie nun wissen, wie Sie JStack und JMAP verwenden, haben Sie zwei der wichtigsten Fehlerbehebungsinstrumente zur Verfügung. In diesem Tutorial wurde gezeigt. Wir haben auch besprochen, wie man Heap -Leckagen mit JMAP repariert.

Das ist es für diese Lektion. Bis zum nächsten Mal.