Développement logiciel
Optimisation et diagnostic des performances de la JVM
Formation avancée de diagnostic pour les ingénieurs responsables de systèmes Java en production. Les participants mesurent avant de régler : structure mémoire, ramasse-miettes, contention de threads et pression d'allocation sont analysés avec Flight Recorder, heap dumps et benchmarks, non avec des options copiées sur un forum.
Aperçu
Un apprentissage pratique pour le transfert en situation de travail.
La plupart des travaux de performance Java échouent pour une seule raison : l'équipe modifie des options avant de savoir où passe le temps. On augmente le tas pour masquer une fuite, on change de ramasse-miettes pour résoudre une contention, on double la capacité pour absorber un défaut d'allocation, et un benchmark mesure la chauffe du JIT au lieu du code visé. Cette formation instaure d'abord une discipline de mesure. Les participants lisent journaux de GC et profils Flight Recorder, analysent des heap dumps pour localiser les objets retenus, diagnostiquent contention et famine de threads, et arbitrent entre débit et latence avec des chiffres qui justifient chaque changement.
Prérequis
Plusieurs années d'expérience en développement ou en exploitation Java et familiarité avec l'exécution d'applications Java sur serveur.
Objectifs
- Interpréter la structure mémoire de la JVM, le comportement d'allocation et les journaux de ramasse-miettes.
- Choisir et dimensionner un collecteur, G1, ZGC ou Parallel, en fonction d'un objectif déclaré de latence ou de débit.
- Profiler CPU, allocation et contention de verrous avec JDK Flight Recorder et Mission Control.
- Analyser des heap dumps pour identifier fuites, ensembles retenus et véritable détenteur de la mémoire.
- Diagnostiquer famine de threads, interblocages et épuisement de pools à partir de thread dumps sous charge.
- Concevoir des benchmarks qui tiennent compte de la chauffe du JIT et produisent des chiffres exploitables.
Public cible
- Ingénieurs Java confirmés responsables de la performance en production
- Ingénieurs SRE et plateforme exploitant des charges JVM
- Architectes applicatifs fixant des objectifs de latence, de capacité et de coût
- Ingénieurs performance et spécialistes des tests de charge
- Ingénieurs de support traitant les incidents de production escaladés
- Responsables techniques comptables du coût d'infrastructure des services Java
Programme
Une structure claire pour le parcours d'apprentissage.
Programme
Les points du programme sont regroupés dans un seul bloc au lieu de créer un module par ligne.
Module 1 : Internes de la JVM et coût réel d'un objet
Zones mémoire d'exécution : tas, metaspace, piles de threads et mémoire native
Disposition des objets, taille d'en-tête et coût réel d'une allocation
Niveaux de compilation JIT, inlining et pourquoi les premières mesures induisent en erreur
Analyse d'échappement, déoptimisation et limites de ce que le compilateur peut corriger
Module 2 : Comportement du ramasse-miettes et choix du collecteur
Collecte générationnelle, régions et origine réelle des temps de pause
Réglage de G1 : taille des régions, cibles de pause et allocations humongous
ZGC et collecte à faible latence : le coût en débit et en empreinte mémoire
Lire les journaux GC pour distinguer un problème de dimensionnement d'une vraie fuite
Module 3 : Fuites mémoire et analyse du tas
Capturer des heap dumps en sécurité sur une instance de production active
Arbres de dominateurs, taille retenue et localisation de l'objet qui retient la mémoire
Sources classiques de fuite : caches, variables de thread, écouteurs et chargeurs de classes
Croissance hors tas et mémoire native invisible dans le heap
Module 4 : Profilage avec Flight Recorder et Mission Control
Activer un enregistrement JFR continu avec une surcharge acceptable en production
Lire ensemble les profils CPU, allocation et E/S plutôt qu'isolément
Paramètres d'événements, événements personnalisés et enregistrement d'un incident en direct
Transformer un profil en liste hiérarchisée de changements réellement utiles
Module 5 : Concurrence, contention et comportement des threads
Thread dumps : interblocages, threads bloqués et pools épuisés
Contention de verrous, faux partage et événements de synchronisation contendue
Dimensionnement des executors, profondeur de file et contre-pression sous charge soutenue
Threads virtuels : quelles charges y gagnent et lesquelles s'en trouvent dégradées
Module 6 : Benchmarking, décisions de réglage et capacité
Benchmarks JMH résistant à la chauffe, à l'élimination de code mort et au bruit
Percentiles de latence, omission coordonnée et restitution honnête aux parties prenantes
Limites de conteneur, parts CPU et ergonomie de la JVM sous cgroups
Consigner une décision de réglage pour que l'équipe puisse la réexaminer avec des preuves
Supports fournis
- Manuel de formation, exemples de code commentés et notes de référence
- Environnement de laboratoire et dépôts de démarrage
- Exercices, check-lists et modèles de code réutilisables
- Certificat de participation 4D
- Accompagnement technique après la formation
Options de formation
Les programmes peuvent être organisés en entreprise, en ligne ou dans un format hybride selon le calendrier, la localisation et les objectifs de vos équipes. Lorsqu'un certificat ou un examen externe est inclus, les règles et frais de certification restent soumis aux politiques de l'organisme certificateur, tandis que 4D assure la formation et l'accompagnement à la préparation.
Pourquoi choisir 4D
4D enseigne cette formation sur des charges instrumentées plutôt que sur des diapositives : les participants provoquent délibérément fuites, contentions et régressions de temps de pause, puis les traquent avec les outils qu'ils utiliseront à trois heures du matin. Lorsque vous pouvez les fournir, les formateurs partent de vos propres journaux GC et enregistrements, afin que les décisions de réglage sortent de la salle déjà appliquées.
Formations liées
Fondamentaux de la programmation Python
Une introduction pratique à Python pour les ingénieurs et analystes qui ont besoin de code opérationnel plutôt que d'extraits de tutoriel. Les participants acquièrent de l'aisance avec les types, les collections, les fonctions, les fichiers et la gestion des erreurs, puis construisent un programme complet.
View coursePython intermédiaire et pratiques de code propre
Conçue pour les développeurs dont le code Python fonctionne mais résiste au changement. Le programme couvre dataclasses, générateurs, décorateurs, gestionnaires de contexte et annotations de types, puis applique les refactorings qui transforment un module interminable en unités testées contrôlées par black, ruff et mypy.
View courseAutomatisation et scripting Python pour les tâches métier
Destinée aux équipes qui perdent chaque semaine des heures en manipulations de fichiers, de tableurs et de rapports. Les participants automatisent ces tâches avec Python : traitement de fichiers en lot, Excel et CSV, appels d'API REST, alertes par e-mail et tâches planifiées qui signalent clairement toute défaillance.
View course