Während der Verwendung von Java -Software treten seltsame Probleme manchmal unerklärlich auf. Diese Probleme können oft nicht mit Protokollinformationen gefunden werden. Zu diesem Zeitpunkt müssen wir das Problem analysieren, indem wir die Stapelaufrufbeziehung von Threads im Prozess überprüfen.
Wenn wir beispielsweise eine Operation durchführen, werden mehrere Warnboxen unerklärlicherweise angezeigt, von denen einige normal sind und einige nicht. Wie sollten wir für diese Fehlerwarnmeldungen den Code an welchem Ort ein Fehlerpop-up-Box finden? Wir müssen die verschiedenen Themen der Software nach dem Popup-Box anzeigen und herausfinden, welcher Thread das Problem verursacht. Aber manchmal können wir aufgrund von Umwelt, Zeit und anderen Problemen die IDE nicht zum Debuggen nutzen. Wir können nur einen Speicherschnappschuss über die Toolsoftware machen und dann die Speicherinformationen analysieren.
Heute stelle ich ein häufig verwendetes Werkzeug vor: JStack
JStack ist ein Tool mit JDK und ist auch eine Software mit einer sehr hohen Erscheinungsquote in der JVM -Leistungsstimmung. Es ist also sehr notwendig, es zu meistern.
JStack kann Thread -Schnappschüsse des aktuellen Zeitpunkts des JVM generieren.
Ein Thread -Snapshot ist eine Sammlung von Method -Stapeln, die jeder Thread im aktuellen JVM ausführt. Die Hauptgründe für die Erzeugung von Thread -Schnappschüssen:
1.
2. Bestimmen Sie die Quelle der Ausnahmeinformationen durch Thread -Snapshot -Analyse der Anrufbeziehung der aktuellen Ausführungsmethode.
Es ist sehr einfach zu verwenden:
(PS: Die Prämisse ist, dass Sie bereits einen JDK mit JStack haben. Es ist am besten, die Umgebungsvariablen zu haben.)
Schritt 1: Zeigen Sie die PID des Prozesses über Windows Task Manager an
Hier sprechen wir kurz darüber, was PID ist: PID ist die Identität jedes Prozesses. Es handelt sich um eine eindeutige Identität, die vom Betriebssystem zugewiesen wird, um die Identität des Prozesses nach Beginn der Software zu identifizieren.
Wie gezeigt
Unter der Registerkarte Prozessansicht> Spalten auswählen
Überprüfen Sie die PID und bestätigen Sie
Wechseln Sie zur Registerkarte Anwendung und wählen Sie das Programm zum Snapshot -Speicher aus. Das ausgewählte Bild ist Android Studio. Klicken Sie mit der rechten Maustaste, um zu verarbeiten.
Hier können wir sehen, dass die entsprechende PID von Android Studio 9952 beträgt
Der zweite Schritt besteht darin, die Befehlszeile zu öffnen und das JStack -Programm auszuführen
Beachten Sie, dass die Umgebungsvariable nicht erfolgreich hinzugefügt wird, sie nur im JStack -Pfad ausgeführt werden kann, andernfalls erkennt das Betriebssystem es nicht.
Wie in der Abbildung gezeigt, gibt es hier im Allgemeinen zwei Betriebsparameter, mit denen Speicherschnappschüsse aufgenommen werden.
Ihre Bedeutungen sind wie folgt:
-L Long Listings werden zusätzliche Sperrinformationen ausdrucken. Wenn ein Deadlock auftritt
-M Mischmodus gibt nicht nur Java -Stapelinformationen aus, sondern auch C/C ++ -Stapelinformationen (z. B. native Methode)
Wir verwenden normalerweise den Parameter -l, um den Anforderungen zu erfüllen
Das Format lautet wie folgt JStack -l PID >> 123.txt
PS Hinweis hier >> bedeutet Umleitung, was bedeutet, die erfassten Schnappschüsse auf 987.txt auszugeben. >> Es ist am besten, Räume zu behalten, wenn die zweimal
Auf diese Weise generieren wir eine 987.txt -Datei im Befehlszeilenpfad und schreiben den Speicherschnappschuss gleichzeitig in diesen Text.
Wie in der Abbildung unten gezeigt: