Dépannage avec Java Flight Recorder

but de fond

Utilisons Oracle Java Mission Control (JMC) / Java Flight Recorder (JFR), un outil payant de surveillance et de dépannage disponible à partir d'Oracle Java7 u40 ou version ultérieure.

Qu'est-ce que JMC / JFR?

Environnement de vérification

--Oracle JDK 8 dernier --OS: Windows 7 (bien sûr, tout type de système d'exploitation peut être utilisé tant que le JDK fonctionne)

Les références

Télécharger et installer

--JMC / JFR lui-même est intégré au JDK, donc si vous avez déjà installé le JDK, aucun téléchargement ou installation supplémentaire n'est requis! Vous pouvez commencer à l'utiliser selon la méthode d'exécution ci-dessous. --Si vous souhaitez utiliser le plugin Eclipse, téléchargez-le à partir du site suivant (non requis) - [Oracle Java Mission Control for Eclipse] (http://download.oracle.com/technology/products/missioncontrol/updatesites/experimental/5.5.0/eclipse/)

Méthode d'exécution

--Démarrage de l'interface graphique JMC / JFR --Exécutez $ {JAVA_HOME} \ bin \ jmc.exe

Déplacez rapidement ce à quoi il ressemble

1. Quoi préparer

Téléchargez "Java SE Development Kit 8uXXX Demos and Samples Downloads zip" sur Site de téléchargement JDK. En fait, le fichier d'exemple de jfr y est également inclus.

2. Parcourir les fichiers jfr déjà enregistrés

Exécutez $ {JAVA_HOME} \ bin \ jmc.exe image

Sélectionnez java2d_demo.jfr dans File-> Open File ... et ouvrez-le. Comme ci-dessous Si vous pouvez voir l'écran, c'est OK. image

3. Essayez de l'enregistrer vous-même

Enregistrons en fait en utilisant Java2Demo.jar inclus dans Java Demos and Samples.

Étape 1. Exécutez l'exemple d'application

Exécutez le fichier Java2Demo.jar comme suit

SET JDK_HOME=<Chemin JDK>
SET PRG=D:\A_Dev\Java\jdk-8u101-windows-x64-demos\jdk1.8.0_101\demo\jfc\Java2D\Java2Demo.jar
SET JVM=-Xmx32m -Xms16m ← Pour générer fréquemment des GC. Non requis
SET JFR=-XX:+UnlockCommercialFeatures -XX:+FlightRecorder

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

Cliquez ici pour l'image d'écran de Java2Demo.jar. Si vous souhaitez mettre une charge, sélectionnez l'onglet "Transforms" et réglez le délai Anim sur le côté droit de l'écran court.

image

Étape 2. Démarrez l'écran JMC

Lorsque vous démarrez jmc.exe, l'écran suivant s'affiche. Vous devriez voir le processus Java2Demo.jar sur la gauche. Le deuxième processus "Le JVM Running Mission Control" sur la gauche est le propre processus de jmc.

image

Étape 3. Enregistrement de vol depuis l'écran JMC

Cliquez avec le bouton droit de la souris sur la partie du processus et sélectionnez "Démarrer l'enregistrement de vol ...". image

À partir de l'écran «Démarrer l'enregistrement de vol» ci-dessous, réglez la durée d'enregistrement sur «1 min» et le paramètre d'événement sur «Profilage - sur le serveur». Cliquez sur le bouton "Terminer" pour démarrer l'enregistrement. image

La fenêtre contextuelle suivante apparaît et l'enregistrement démarre. En attendant 1 minute, jouez avec l'application Java2Demo.jar (avec ou sans charge). image

Étape 4. Parcourir le fichier jfr enregistré

Après 1 minute, le fichier .jfr qui a été enregistré automatiquement devrait démarrer.

Point de confirmation 1-Général

Vous pouvez voir les valeurs moyennes et maximales de «utilisation du tas», «utilisation du processeur» et «temps de pause GC» pendant 1 minute enregistrées comme suit. image

Point de confirmation 2 --GC

Sélectionnez l'onglet principal «Mémoire» sur la gauche et sélectionnez le sous-onglet «Garbage Collection». On peut voir que GC se produit fréquemment comme indiqué ci-dessous. image

Point de confirmation 3 - Méthodes chaudes

Sélectionnez l'onglet principal «Code» sur la gauche et sélectionnez le sous-onglet «Méthodes chaudes». Vous pouvez voir que java.util.HashMap.put,java.awt.TexturePaintContext ...a été appelé le plus fréquemment pendant la minute d'enregistrement. image

Configuration de l'écran JMC / JFR

La composition globale de l'écran se compose d'un onglet principal sur le côté gauche et d'un sous-onglet pour chaque onglet principal. La configuration de l'écran pour chaque onglet principal est la suivante (* L'onglet principal WebLogic dans la capture d'écran est ce que vous voyez si le plugin pour WebLogic est installé)

Général

image

Mémoire

image

Code

image

Fil

image

I/O image

Système

image

un événement

image

Liste de chaque onglet principal / sous-onglet

(* Ci-dessous, les noms des onglets sont écrits en anglais. La plupart des manuels et références étant en anglais, il est plus facile de s'y habituer avec des noms anglais.)

No Main Tab Sub Tab La description
1_1 General Overview Informations de base telles que l'utilisation maximale du tas, l'utilisation totale du processeur et le temps de pause du GC
1_2 JVM Information Informations JVM
1_3 System Properties Toutes les propriétés système définies au niveau du système d'exploitation
1_4 Recording Informations au moment de l'enregistrement JFR (quel événement a été activé)
2_1 Memory Overview Informations générales sur l'utilisation de la mémoire et statistiques sur le garbage collection
2_2 Garbage Collections Informations sur l'utilisation de la mémoire au fil du temps et tous les garbage collection
2_3 GC Times Informations sur le temps qu'il a fallu pour exécuter le GC et combien de temps l'application s'est complètement interrompue en raison du GC
2_4 GC Configuration Informations sur la configuration du GC
2_5 Allocations Toutes les allocations de mémoire effectuées.* TLAB (Thread Local Area Buffer) -Une petite zone mémoire à laquelle de nouveaux objets sont alloués
2_6 Object Statistics Cours avec live set
3_1 Code Overview Affiche les packages et les classes qui ont passé le plus de temps d'exécution
3_2 Hot Methods Méthode la plus échantillonnée
3_3 Call Tree Afficher les threads de méthode à chaud dans l'ordre inverse
3_4 Exceptions Afficher l'exception levée
3_5 Compilations Affiche les méthodes compilées lorsque l'application était en cours d'exécution
3_6 Class Loading Affiche le nombre de classes chargées au fil du temps, les classes réellement chargées et les classes déchargées
4_1 Thread Overview Changements dans l'utilisation du processeur et le nombre de threads au fil du temps
4_2 Hot Threads Affiche les threads qui effectuent la plupart de l'exécution du code
4_3 Contention Verrouiller les informations de conflit
4_4 Latencies Invocation de sleep ou wait, lecture depuis socket, fichier I/Afficher les autres causes de temps d'attente, comme attendre O
4_5 Thread Dumps Affiche les vidages de thread périodiques qui peuvent être déclenchés dans l'enregistrement
4_6 Lock Instances Affiche l'instance exacte de l'objet le plus en attente de synchronisation
5_1 I/O Overview
5_2 File Reads File I/O lu
5_3 File Writes File I/O écrire
5_4 Socket Reads Network I/O lu
5_5 Socket Writes Network I/O écrire
6_1 System Overview CPU, Memory,Informations sur le système d'exploitation
6_2 Process Informations sur le processus du système au moment de l'enregistrement
6_3 Environment Informations sur les variables d'environnement système au moment de l'enregistrement
7_1 Event Overview
7_2 Log
7_3 Graph
7_4 Threads
7_5 Stack Traces
7_6 Histogram

Recommended Posts

Dépannage avec Java Flight Recorder
Vérifier l'utilisation du tas avec Java Flight Recorder
J'ai vérifié Java Flight Recorder (JFR)
Exécuter l'analyse avec OpenJDK11 Java Flight Recorder + Google Kubernetes Engine
Enregistreur de vol OpenJDK 11
Installez java avec Homebrew
Changer de siège avec Java
Installez Java avec Ansible
Dépannage de l'API Java Docker-Client
[Java] Enregistrement de dépannage GlassFish 5
Changer java avec direnv
Téléchargement Java avec Ansible
Raclons avec Java! !!
Construire Java avec Wercker
Conversion Endian avec JAVA
(Java) BDD facile avec Spectrum?
Utiliser des couches Lambda avec Java
Créer un multi-projet Java avec Gradle
Configuration Java avec Spring MVC
Expérimentons l'expansion en ligne Java
[Template] Connexion MySQL avec Java
Réécrire Java try-catch avec facultatif
Installez Java 7 avec Homebrew (cask)
[Java] Communication JSON avec jackson
Java pour jouer avec Function
Essayez la connexion DB avec Java
Activer Java EE avec NetBeans 9
[Java] JavaConfig avec classe interne statique
Essayez gRPC avec Java, Maven
Exploitons Excel avec Java! !!
Gestion des versions Java avec SDKMAN
Cryptage / décryptage RSA avec Java 8
Trier les chaînes comme une fonction caractéristique avec Java
Orienté objet avec Strike Gundam (java)
[Java] Acquisition de contenu avec HttpCliient
Gestion des versions Java avec jenv
Rationalisez les tests Java avec Spock
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
Erreur lors de la lecture avec java
Utilisation de Mapper avec Java (Spring)
Mémo d'étude Java 2 avec Progate
Premiers pas avec les bases de Java
Affichage saisonnier avec commutateur Java
Utiliser SpatiaLite avec Java / JDBC
Étudier Java avec Progate Note 1
Comparez Java 8 en option avec Swift
Analyse HTML (scraping) avec JAVA
Exécuter Java VM avec Web Assembly
Transition d'écran avec swing, java
Test unitaire Java avec Mockito
[Java 8] Suppression en double (et vérification en double) avec Stream
Créer une classe immuable avec JAVA
Expression lambda Java apprise avec Comparator
Installer Java avec Docker basé sur Ubuntu 16.04
Java pour apprendre avec les ramen [Partie 1]
Utiliser java avec MSYS et Cygwin
Traçage distribué avec OpenCensus et Java
BDD Java 100% pur avec JGiven (Introduction)
Installez Java et Tomcat avec Ansible