Lors de ce talk, je retrace les différentes pistes que j'ai suivies pour identifier et diagnostiquer le bug JDK-8322282.
Mon objectif est de démystifier cette analyse pour montrer qu'elle était à la portée de n'importe quel développeur ou développeuse avec quelques années d'expérience de Java.
Le PDF de présentation est disponible en cliquant sur l'image ci-dessous
Merci à Touraine Tech pour avoir publié la captation sur YouTube. Merci au Nantes JUG pour leur accueil.
Pour compiler Java (10 minutes au total)
bash configure --with-boot-jdk=/opt/jdk-n
pour générer la configuration (on a besoin d'un JDK N ou N-1)make images
pour compiler le JDK en fonction de la configurationPour trouver un commit introduisant un changement
git bisect start
pour commencer la sessiongit bisect good
pour indiquer qu'il n'y a pas le problème sur ce commitgit bisect bad
pour indiquer qu'il y a le problème sur ce commitPour changer le GC utilisé
-XX:+UseParallelGC
pour utiliser Parallel GC, c'est le GC le plus efficace mais qui peut provoquer des pauses de plusieurs secondes de l'application-XX:+UseG1GC
pour utiliser G1 GC, c'est le GC par défaut et c'est un bon compromis entre la performance et les pauses-XX:+UseZGC
pour utiliser ZGC, c'est un GC à très faible latence avec des pauses de moins d'une milliseconde mais un coût à l'exécution plus important-XX:+UseShenandoahGC
pour utiliser Shenandoah GC, il est similaire à ZGC mais très configurable-XX:+UseSerialGC
pour utiliser Serial GC, il n'utilise qu'un thread et est très efficace pour les micro-servicesPour afficher l'assembleur généré pour une méthode
-XX:+UnlockDiagnosticVMOptions
pour activer les options de diagnostic-XX:CompileCommand="print package.Class::method"
pour choisir quelle méthode afficher-XX:PrintAssemblyOptions=intel
pour avoir l'assembleur IntelPour choisir le niveau de compilation
-Xint
pour ne pas compiler et seulement interpréter-XX:TieredStopAtLevel=1
pour s'arrêter au niveau 1 du compilateur C1 (assembleur basique)-XX:TieredStopAtLevel=2
pour s'arrêter au niveau 2 du compilateur C1 (assembleur avec statistiques et un peu de profiling)-XX:TieredStopAtLevel=3
pour s'arrêter au niveau 3 du compilateur C1 (assembleur avec beaucoup de profiling, plus lent)