Fehlerbehebung mit Java Flight Recorder

Hintergrund Zweck

Verwenden wir Oracle Java Mission Control (JMC) / Java Flight Recorder (JFR), ein kostenpflichtiges Überwachungs- und Fehlerbehebungstool, das von Oracle Java7 u40 oder höher verfügbar ist.

Was ist JMC / JFR?

Überprüfungsumgebung

--Oracle JDK 8 spätestens --OS: Windows 7 (Natürlich kann jede Art von Betriebssystem verwendet werden, solange das JDK ausgeführt wird.)

Verweise

Herunterladen und installieren

--JMC / JFR selbst ist in das JDK integriert. Wenn Sie das JDK bereits installiert haben, ist kein zusätzlicher Download oder eine zusätzliche Installation erforderlich! Sie können es gemäß der folgenden Ausführungsmethode verwenden.

Ausführungsmethode

Bewegen Sie schnell, wie es aussieht

1. Was ist vorzubereiten?

Laden Sie "Java SE Development Kit 8uXXX Demos und Beispiele Downloads zip" von [JDK Download Site] herunter (http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html). Tatsächlich ist auch die Beispieldatei von jfr darin enthalten.

--Lage: Ordner "sample \ missioncontrol \ flightrecordings" in der oben heruntergeladenen Zip-Datei

2. Durchsuchen Sie bereits aufgezeichnete jfr-Dateien

Führen Sie $ {JAVA_HOME} \ bin \ jmc.exe aus image

Wählen Sie java2d_demo.jfr unter Datei-> Datei öffnen ... und öffnen Sie es. Wie unten Wenn Sie den Bildschirm sehen können, ist es OK. image

3. Versuchen Sie es selbst aufzunehmen

Lassen Sie uns tatsächlich mit Java2Demo.jar aufnehmen, das in Java Demos und Samples enthalten ist.

Schritt 1. Führen Sie die Beispiel-App aus

Führen Sie die Datei Java2Demo.jar wie folgt aus

SET JDK_HOME=<JDK-Pfad>
SET PRG=D:\A_Dev\Java\jdk-8u101-windows-x64-demos\jdk1.8.0_101\demo\jfc\Java2D\Java2Demo.jar
SET JVM=-Xmx32m -Xms16m ← Um häufig GC zu generieren. Nicht benötigt
SET JFR=-XX:+UnlockCommercialFeatures -XX:+FlightRecorder

%JDK_HOME%\bin\java %JVM% %JFR% -jar %PRG%

Klicken Sie hier für das Bildschirmbild von Java2Demo.jar. Wenn Sie laden möchten, wählen Sie die Registerkarte "Transformationen" und stellen Sie die Anim-Verzögerung auf der rechten Seite des Bildschirms kurz ein.

image

Schritt 2. Starten Sie den JMC-Bildschirm

Wenn Sie jmc.exe starten, wird der folgende Bildschirm angezeigt. Sie sollten den Java2Demo.jar-Prozess auf der linken Seite sehen. Der zweite Prozess "The JVM Running Mission Control" auf der linken Seite ist der eigene Prozess von jmc.

image

Schritt 3. Flugaufzeichnung vom JMC-Bildschirm

Klicken Sie mit der rechten Maustaste auf den Prozessteil und wählen Sie "Flugaufzeichnung starten ...". image

Stellen Sie im Bildschirm "Flugaufzeichnung starten" unten die Aufnahmezeit auf "1 min" und die Ereigniseinstellung auf "Profiling - on server" ein. Klicken Sie auf die Schaltfläche "Fertig stellen", um die Aufnahme zu starten. image

Das folgende Popup wird angezeigt und die Aufnahme wird gestartet. Spielen Sie mit der Java2Demo.jar-App (mit oder ohne Last), während Sie 1 Minute warten. image

Schritt 4. Durchsuchen Sie das aufgenommene jfr

Nach 1 Minute sollte die automatisch aufgenommene .jfr-Datei gestartet werden.

Bestätigungspunkt 1-Allgemein

Sie können die Durchschnitts- und Maximalwerte von "Heap-Auslastung", "CPU-Auslastung" und "GC-Pausenzeit" für 1 Minute wie folgt aufzeichnen. image

Bestätigungspunkt 2 - GC

Wählen Sie links die Hauptregisterkarte "Speicher" und dann die Unterregisterkarte "Garbage Collection". Es ist ersichtlich, dass GC häufig auftritt, wie unten gezeigt. image

Bestätigungspunkt 3 - Heiße Methoden

Wählen Sie links die Hauptregisterkarte "Code" und dann die Unterregisterkarte "Hot Methods". Sie können sehen, dass "java.util.HashMap.put", "java.awt.TexturePaintContext ..." während der 1-minütigen Aufnahme am häufigsten aufgerufen wurde. image

JMC / JFR-Bildschirmkonfiguration

Die Gesamtkonfiguration des Bildschirms besteht aus einer Hauptregisterkarte links und Unterregistern für jede Hauptregisterkarte. Die Bildschirmkonfiguration für jede Hauptregisterkarte lautet wie folgt (* Auf der Hauptregisterkarte von WebLogic in der Bildschirmaufnahme sehen Sie, ob das Plugin für WebLogic installiert ist.)

Allgemeines

image

Erinnerung

image

Code

image

Faden

image

I/O image

System

image

Veranstaltung

image

Liste jeder Hauptregisterkarte / Unterregisterkarte

(* Im Folgenden sind die Registerkartennamen in englischer Sprache verfasst. Da die meisten verschiedenen Handbücher und Referenzen in englischer Sprache verfasst sind, ist es einfacher, sich mit englischen Namen an sie zu gewöhnen.)

No Main Tab Sub Tab Erläuterung
1_1 General Overview Grundlegende Informationen wie maximale Heap-Auslastung, Gesamt-CPU-Auslastung und GC-Pausenzeit
1_2 JVM Information JVM-Informationen
1_3 System Properties Alle Systemeigenschaften, die auf Betriebssystemebene festgelegt wurden
1_4 Recording Informationen zum Zeitpunkt der JFR-Aufzeichnung (welches Ereignis wurde aktiviert)
2_1 Memory Overview Allgemeine Informationen zur Speichernutzung und Statistiken zur Speicherbereinigung
2_2 Garbage Collections Informationen zur Speichernutzung im Zeitverlauf und zu allen Speicherbereinigungen
2_3 GC Times Informationen darüber, wie lange es gedauert hat, den GC auszuführen, und wie lange die Anwendung aufgrund des GC vollständig angehalten hat
2_4 GC Configuration Informationen zur GC-Konfiguration
2_5 Allocations Alle Speicherzuordnungen vorgenommen.* TLAB (Thread Local Area Buffer) -Ein kleiner Speicherbereich, dem neue Objekte zugeordnet werden
2_6 Object Statistics Klasse mit Live-Set
3_1 Code Overview Zeigt die Pakete und Klassen an, die die meiste Ausführungszeit verbracht haben
3_2 Hot Methods Methode mit den meisten Stichproben
3_3 Call Tree Zeigen Sie heiße Methodenthreads in umgekehrter Reihenfolge an
3_4 Exceptions Ausgelöste Ausnahme anzeigen
3_5 Compilations Zeigt kompilierte Methoden an, als die Anwendung ausgeführt wurde
3_6 Class Loading Zeigt die Anzahl der im Laufe der Zeit geladenen Klassen, die tatsächlich geladenen Klassen und die geladenen Klassen an
4_1 Thread Overview Änderungen der CPU-Auslastung und der Anzahl der Threads im Laufe der Zeit
4_2 Hot Threads Zeigt Threads an, die den größten Teil der Codeausführung ausführen
4_3 Contention Sperren Sie Konfliktinformationen
4_4 Latencies Schlaf oder Wartezeit Anruf, aus Socket lesen, Datei I./Zeigen Sie andere Ursachen für die Wartezeit an, z. B. das Warten auf O.
4_5 Thread Dumps Zeigt periodische Thread-Dumps an, die im Datensatz ausgelöst werden können
4_6 Lock Instances Zeigt die genaue Instanz des Objekts an, das am meisten auf die Synchronisation wartet
5_1 I/O Overview
5_2 File Reads File I/O lies
5_3 File Writes File I/O schreibe
5_4 Socket Reads Network I/O lies
5_5 Socket Writes Network I/O schreibe
6_1 System Overview CPU, Memory,Betriebssysteminformationen
6_2 Process Systemprozessinformationen zum Zeitpunkt der Aufzeichnung
6_3 Environment Informationen zu Systemumgebungsvariablen zum Zeitpunkt der Aufzeichnung
7_1 Event Overview
7_2 Log
7_3 Graph
7_4 Threads
7_5 Stack Traces
7_6 Histogram

Recommended Posts

Fehlerbehebung mit Java Flight Recorder
Überprüfen Sie die Heap-Nutzung mit Java Flight Recorder
Ich habe Java Flight Recorder (JFR) überprüft.
Führen Sie die Analyse mit OpenJDK11 Java Flight Recorder + Google Kubernetes Engine aus
OpenJDK 11 Flugschreiber
Installieren Sie Java mit Homebrew
Wechseln Sie die Plätze mit Java
Installieren Sie Java mit Ansible
Fehlerbehebung bei der Docker-Client Java API
[Java] GlassFish 5-Fehlerbehebungsdatensatz
Schalten Sie Java mit direnv
Java-Download mit Ansible
Lass uns mit Java kratzen! !!
Erstellen Sie Java mit Wercker
Endian-Konvertierung mit JAVA
(Java) Einfache BDD mit Spektrum?
Verwenden Sie Lambda-Ebenen mit Java
Erstellen Sie mit Gradle ein Java-Multiprojekt
Java-Konfiguration mit Spring MVC
Experimentieren wir mit der Java-Inline-Erweiterung
[Vorlage] MySQL-Verbindung mit Java
Schreiben Sie Java Try-Catch mit Optional neu
Installieren Sie Java 7 mit Homebrew (Fass)
[Java] JSON-Kommunikation mit Jackson
Java zum Spielen mit Function
Versuchen Sie eine DB-Verbindung mit Java
Aktivieren Sie Java EE mit NetBeans 9
[Java] JavaConfig mit statischer innerer Klasse
Versuchen Sie gRPC mit Java, Maven
Lassen Sie uns Excel mit Java betreiben! !!
Java-Versionsverwaltung mit SDKMAN
RSA-Verschlüsselung / Entschlüsselung mit Java 8
Sortieren Sie Zeichenfolgen als charakteristische Funktion mit Java
Objektorientiert mit Strike Gundam (Java)
[Java] Inhaltserfassung mit HttpCliient
Java-Versionsverwaltung mit jenv
Optimieren Sie Java-Tests mit Spock
Stellen Sie mit Java eine Verbindung zur Datenbank her
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
Fehler beim Spielen mit Java
Verwenden von Mapper mit Java (Spring)
Java Study Memo 2 mit Progate
Erste Schritte mit Java Basics
Saisonale Anzeige mit Java-Schalter
Verwenden Sie SpatiaLite mit Java / JDBC
Lernen von Java mit Progate Note 1
Vergleichen Sie Java 8 Optional mit Swift
HTML-Analyse (Scraping) mit JAVA
Führen Sie Java VM mit Web Assembly aus
Bildschirmübergang mit Swing, Java
Java Unit Test mit Mockito
[Java 8] Doppelte Löschung (& doppelte Überprüfung) mit Stream
Erstellen Sie mit JAVA eine unveränderliche Klasse
Java-Lambda-Ausdruck, der mit Comparator gelernt wurde
Installieren Sie Java mit Ubuntu 16.04 Docker
Java mit Ramen lernen [Teil 1]
Verwenden Sie Java mit MSYS und Cygwin
Verteilte Ablaufverfolgung mit OpenCensus und Java
100% reines Java BDD mit JGiven (Einführung)
Installieren Sie Java und Tomcat mit Ansible