0Pricing
Java Academy · Leçon

Java Flight Recorder

Profilage à faible surcharge

Java Flight Recorder est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.

Qu’est-ce que JFR ?

Enregistreur de vol Java (JFR) est un moteur de profilage et de collecte d’événements directement intégré à la JVM.

Il enregistre des événements détaillés d’exécution — échantillons de méthodes, allocations, ramasse-miettes, verrous, IO — dans un fichier binaire .jfr, avec une très faible surcharge. Il est fourni avec le JDK ; aucun agent supplémentaire n’est nécessaire.

Pourquoi une faible surcharge est importante

Les outils de profilage traditionnels par instrumentation peuvent ralentir une application d’un facteur 2 ou davantage, ce qui déforme précisément les mesures que vous souhaitez obtenir.

JFR est conçu pour fonctionner en production, avec généralement environ 1 % de surcharge. Vous pouvez donc le laisser activé et capturer un enregistrement lorsqu’un incident réel se produit, plutôt que de vous limiter à un laboratoire.

Démarrer un enregistrement au lancement

Activez JFR avec une option de la JVM au démarrage de votre application :

  • -XX:StartFlightRecording=duration=60s,filename=app.jfr

Cette option enregistre 60 secondes d’événements, puis les écrit dans app.jfr. Vous pouvez également démarrer un enregistrement qui s’exécute jusqu’à l’arrêt de la JVM.

Contrôler avec jcmd

Vous pouvez également démarrer, arrêter et exporter des enregistrements sur une JVM en cours d’exécution à l’aide de jcmd :

  • jcmd <pid> JFR.start name=rec settings=profile
  • jcmd <pid> JFR.dump name=rec filename=out.jfr
  • jcmd <pid> JFR.stop name=rec

C’est idéal pour récupérer un instantané d’un processus qui présente déjà un dysfonctionnement.

Paramètres&nbsp;: par défaut ou profil

JFR est fourni avec deux configurations intégrées :

  • par défaut — surcharge minimale, sûre pour une utilisation continue en production.
  • profil — échantillonnage plus détaillé, coût légèrement supérieur, pour une analyse ciblée.

Choisissez cette configuration avec settings=profile. Vous pouvez également écrire une configuration .jfc personnalisée pour ajuster les événements individuellement.

Ce que JFR enregistre

JFR capture un ensemble riche d’événements, notamment :

  • Échantillons d’exécution (où le temps CPU est utilisé).
  • Allocations d’objets et activité des TLAB.
  • Pauses du ramasse-miettes.
  • Contention sur les verrous (jdk.JavaMonitorWait).
  • IO des fichiers et des sockets, mises en veille des fils d’exécution et exceptions.

Chaque événement possède un horodatage, une durée et une trace de pile.

Événements personnalisés

Vous pouvez définir vos propres événements JFR pour mesurer la durée d’une logique métier. Étendez jdk.jfr.Event, annotez-la, puis utilisez begin() et commit() autour du travail.

C’est la partie de l’interface de programmation de JFR adaptée à une utilisation autonome. Un enregistrement réel nécessite toujours les options de la JVM, mais la classe d’événement se compile et s’exécute avec n’importe quel JDK.

import jdk.jfr.Event;
import jdk.jfr.Label;

public class Main {
    @Label("Order Processing")
    static class OrderEvent extends Event {
        @Label("Order Id") int orderId;
    }

    public static void main(String[] args) {
        OrderEvent e = new OrderEvent();
        e.orderId = 42;
        e.begin();
        // ... do the work being measured ...
        e.commit();
        System.out.println("Custom JFR event committed for order " + e.orderId);
    }
}

Enregistrement continu

Pour les services qui fonctionnent longtemps, exécutez un enregistrement continu avec une taille ou un âge maximal (un tampon circulaire).

Les anciens événements sont supprimés à mesure que de nouveaux arrivent, de sorte que l’espace disque reste limité. Lorsqu’un incident se produit, exportez le tampon et disposez instantanément des minutes qui l’ont précédé.

Écriture à l’arrêt

Ajoutez dumponexit=true à une option de démarrage de l’enregistrement de vol afin que JFR écrive le tampon lorsque la JVM s’arrête.

Combinez cette option avec -XX:FlightRecorderOptions pour configurer la taille du tampon. Vous capturez ainsi les données même d’un processus sur le point de s’arrêter définitivement.

Lire le fichier

Un fichier .jfr est binaire. Vous pouvez l’analyser visuellement dans le contrôle de mission du JDK (leçon suivante), ou par programmation avec l’interface de programmation jdk.jfr.consumer et RecordingFile.

La ligne de commande jfr print app.jfr peut également exporter les événements sous forme de texte pour effectuer rapidement des recherches.

Diffuser les événements en direct

Depuis JDK 14, JFR prend en charge la diffusion d’événements via l’interface de programmation jdk.jfr.consumer.RecordingStream.

Au lieu d’exporter un fichier et de l’ouvrir plus tard, vous vous abonnez aux événements au moment où ils se produisent et réagissez en temps réel — par exemple, en déclenchant une alerte lorsque les pauses du ramasse-miettes dépassent un seuil. JFR devient ainsi une source de surveillance en direct, et non plus seulement un outil d’analyse a posteriori.

Vérification rapide

Pour quelle raison principale JFR peut-il rester activé en production ?

Récapitulatif

JFR est l’enregistreur de données de vol intégré à la JVM :

  • Collecte d’événements à faible surcharge, sûre en production, dans des fichiers .jfr.
  • Démarrage avec -XX:StartFlightRecording ou jcmd JFR.start.
  • Choix des paramètres par défaut ou du profil ; définition d’événements personnalisés.
  • Utilisation d’un enregistrement continu avec tampon circulaire et de dumponexit.
  • Analyse dans le contrôle de mission du JDK à l’étape suivante.

Questions Fréquemment Posées

La leçon « Java Flight Recorder » est-elle gratuite ?

Oui — le texte complet de « Java Flight Recorder » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Java Flight Recorder » ?

Profilage à faible surcharge Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Java Academy ?

Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Java Flight Recorder » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?

Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Identifier les goulots d’étranglement
  2. Java Flight Recorder
  3. Analyser avec JDK Mission Control
  4. Options courantes de réglage de la JVM
← Retour à Java Academy