• Home
  • About
    • Ahmed DAMMAK photo

      Ahmed DAMMAK

      Full Stack Developer

    • Learn More
    • Twitter
    • LinkedIn
    • Github
  • All Posts
  • All Tags
  • Projects

Profiling et monitoring avec le JDK

29 Sep 2021

Reading time ~3 minutes

Profiling et Monitoring JDK

Talk de Jean-Michel Doudoux @jmdoudoux

Présentation

Java Flight Recorder (JFR) est une fonctionnalité de la JVM qui après activation enregistre des événements émis par son activité mais aussi celle de l’application et même du système d’exploitation avec un très faible overhead. Il est possible d’émettre ses propres événements et même de consommer des événements grâce à une API de Java 14. Depuis Java 11, JFR est open source et il est donc utilisable maintenant en production sans licence commerciale. L’exploitation de ces événements avec l’outil JMC peut être particulièrement appréciable lors d’activités de profiling ou de monitoring. Cette session sera l’occasion de faire un tour d’horizon de ces fonctionnalités qui peuvent s’avérer utiles pour certaines problématiques.

Notes

La JVM est l’élement le plus important de la plate-forme Java

  • execute le Bytecode
  • Ramasse miette
  • JIT
  • Gère les interactions avec le système

On a donc besoin d’outillage pour profiling et monitoring. On a souvent difficultés de reproduire les même problèmes d’env.

Ils existent des outils commerciaux qui sont couteux et qui génèrent un Over-head important.

Il existent les outils JDK

  • Arthas
  • JFR : JDK flight recorder
  • JMC : JDK mission control

A partir de JDK14, on peut exploiter le streaming des events du JFR

JFR

  • Intégré dans une JVM Hotspot
  • Collecte des événements (JVM, Os …)
  • Faible overhead (Ce n’est pas l’enrichissement du byte code via un agent externe)
  • A partir de Java 11, on peut l’utiliser gratuitement
  • JFR produit des recordings
  • On peut mettre plusieurs JFR sur la même JVM avec différentes métriques

Les types d’évènement :

  • Instant Event (Eg démarrage d’un thread)
  • Duration Event
  • Timed events

Requestable event

  • JFR collecte les evt dans un burgers et les dump dans un fichier binaire
  • Activable via l’option -X:StartFlightRecording pour lancer le JFR

Mode de fonctionnement

  • Avec JCMD, on peut rajouter dynamiquement le JFR sans arrêter la JVM : jcmd <pid> JFR.start
  • On peut aussi demander le dump
  • Un fichier XML permet de configurer les events à récupérer
  • 2 profiles standard :
    • default : suivi de prod (monitoring overhead < 1%)
    • Profile (Overhead < 3%) pour le profiling avec un nombre d’enregistrement / capture plus élevé
  • Les fichiers binaires sont exploités grâce à un plugin JMC
  • La version 8.1 requiert java 11
  • Il faut avoir la compatibilité entre JMC et la JVM utilisé
  • On peut utiliser un Java Flight recorder plugin qui propose des plugins (Base d’Eclipse RCP)

En Java 17, il y a 250 events et on peut avoir la liste intégrale

Fournisseurs :

  • AdaptOpenJDK
  • Azul
  • Oracle

A partir de java 11, on a l’outil JFR

  • On a la possibilité de créer des événements à partir de java 9
  • On peut arrêter /démarrer un enregistrements
  • On passe toujours par un fichier

Java 14 : Streaming du JFR

  • On peut récupérer les événement auquel on est abonné sans passer par un fichier
  • 2 étape : S’abonner et enregistrer un Handler qui permet de le gérer

La VisualVM (version 2) Permet d’ouvrir des dump JFR

Testing

  • Junit5 : peut lever des évents JFR (plugin JFR maven)
  • JfrUnit : Ecrire des tests avec des vérification JFR (Requiert Java 16)
  • On peut faire des TNR sur les métriques
// Todo code sample

Conclusion

  • Utiliser JFR & JMC
  • Puissant pour faible du monitoring/profiling
  • Gratuit depuis Jdk8u272
  • API utilisable (depuis java 14)
  • Ecosysteme qui se développe autour de la JFR


Devoxx21JDKJFR