Optimisation d`une Machine Virtuelle Java Les ingrédients pour une
Transcription
Optimisation d`une Machine Virtuelle Java Les ingrédients pour une
Optimisation d’une Machine Virtuelle Java Les ingrédients pour une recette gagnante. Bruno Savard, ing. [email protected] 2016-04-07 Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 1 À propos de Bruno Savard • 6 ans de programmation en C/C++ • 17 ans d’expérience dans logiciel en tant que service (SaaS) − Gestion des opérations (24/7) − Gestion de la performance, capacité et disponibilité. − De 1 à 1200 clients, dont 49 de Fortune 100. − 100 millions de transactions applicatives par jour. • Poursuit sa passion en aidant des compagnies à offrir le meilleur service possible au niveau du Cloud. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 2 Agenda • • • • • • • • • • Optimisation de la performance – un survol Garbage Collector – un survol Structure et spécification de la mémoire d’une JVM Garbage Collector en action Garbage Collector Configuration Les indicateurs de performance Les différents types de problèmes Les outils disponibles Java 8 et G1 En résumé Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 3 Optimisation de la performance Optimisation de la Performance • Temps de réponse − Temps aller-retour − Début / Fin du chronomètre − Entente sur le niveau de service (SLA) • Débit (Throughput) − Charge que le système peut soutenir − Transaction par unité • Efficacité d’utilisation − But: Temps réponse rapide et haut débit Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 5 Garbage Collector Garbage Collector • Le garbage collector doit accomplir deux choses: − Premièrement, détecter les objets inactifs. Réclamer un object actif serait une catastrophe. − Deuxièmement, réclamer l’espace mémoire utilisé par les objects inactifs et le rendre disponible pour un usage future. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 7 Garbage Collector Trois étapes importantes pour le garbage collector. • Marquage (Mark): En partant de la racine de l’application (main), parcourir l’arbre des objets, marquer les objects inactifs. • Nettoyage (Sweep): Effacer les objets marqués • Compaction (Compact): Compacter la mémoire en déplacant les objects côte à côte pour éviter la fragmentation de la mémoire. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 8 Structure et Spécification de la Mémoire Structure de la mémoire • La mémoire d’une JVM est divisée en deux grandes régions: − La Heap et la Non-Heap (Stack). − Les variables locales et les méthodes se retrouvent dans la Non-Heap, tout le reste est dans la Heap. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 10 Structure de la mémoire • La Heap est divisée en deux parties: − La nouvelle génération et la vielle génération. • La Non-Heap (stack) est divisée en deux parties: − Génération Permanente: Utilisées pour emmagasiner les références des objets dans la JVM (classes et méthodes). − Code Cache: Utilisées pour la compilation et emmagasiner le code natif. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 11 Structure de la mémoire Heap = Nouvelle génération + Vieille génération. La génération Permanente ne fait pas partie de la Heap. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 12 GC en Action GC en Action – État initial • Tous les objects sont créés dans la nouvelle génération (Eden). Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 14 GC en Action – Mineur #1 - Avant • • • • Les objects inactifs sont marqués Les objects actifs sont copiés dans la Survivor vide Note: Pause normallement très rapide (en milliseconde) Note: Minor GC = Young GC = Scavenge. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 15 GC en Action – Mineur #1 – Après • L’espace Eden est maintenant prêt à recevoir de nouveaux objects. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 16 GC en Action – Mineur #2 - Avant • Les objets inatifs sont marqués (Eden et Survivor). • 1- Les objects actifs dans Eden sont copiés dans la Survivor vide • 2- Les objects actifs dans la Surviror sont copiés dans la Survivor vide. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 17 GC en Action – Mineur #2 – Après • L’espace Eden est maintenant prêt à recevoir de nouveaux objects. • Le compteur de tous les objects actifs et copiés d’une survivor à l’autre est incrémenté de 1. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 18 GC en Action – Mineur #3 - Avant • Les objets inatifs sont marqués (Eden et Survivor). • 1- Les objects actifs dans Eden sont copiés dans la Survivor vide • 2- Les objects actifs dans la Surviror sont copiés dans la Survivor vide. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 19 GC in Action – Mineur #3 – Après • L’espace Eden est maintenant prêt à recevoir de nouveaux objects. • Le compteur de tous les objects actifs et copiés d’une survivor à l’autre est incrémenté de 1. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 20 GC en Action – Mineur #4a - Avant • • • • Les objets inatifs sont marqués (Eden et Survivor). 1- Les objects actifs dans Eden sont copiés dans la Survivor vide 2- Les objects actifs dans la Surviror sont copiés dans la Survivor vide. 3- Les objets actifs qui ont été copiés MaxTenuring fois sont promus dans la vieille génération. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 21 GC en Action – Mineur #4a – Après • L’espace Eden est maintenant prêt à recevoir de nouveaux objects. • Le compteur de tous les objects actifs et copiés d’une survivor à l’autre est incrémenté de 1. • Les objets promus sont maintenant dans la vieille génération. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 22 GC in Action – Mineur #4b - Avant • • • • Les objets inatifs sont marqués (Eden et Survivor). 1- Les objects actifs dans Eden sont copiés dans la Survivor vide 2- Les objects actifs dans la Surviror sont copiés dans la Survivor vide. 2- Les objects actifs sont automatiquement promus dans la vieille génération. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 23 GC en Action – Mineur #4b – Après • L’espace Eden est maintenant prête à recevoir de nouveaux objects. • L’espace Survivor est rempli de nouveaux objects. • Les objets promus sont maintenant dans la veille génération. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 24 GC in Action – GC Complet - Avant • Les objets inatifs sont marqués (Vieille Génération). • Les objects actifs sont copiés (Compaction) • Note: Old GC = Major GC = Full GC. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 25 GC en Action – GC Complet – Après • La vieille génération est maintenant prête à recevoir de nouveaux objets (promotion). • Note: La nouvelle génération est collectée. • Note: La génération Permanente est elle aussi collectée. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 26 Garbage Collector Configuration Quelle configuration utiliser? Configuration Serveur -server -XX:+UseCompressedOops (Serveur 64bits, Heap < 32G) -XX:+DisableExplicitGC Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 28 Quel type de collecteur utiliser? Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 29 Quel type de collecteur utiliser? • Série: (-XX:+UseSerialGC) − Machine à un processeur et des petites Heaps • Parallèle: (-XX:+UseParallelOldGC [-XX:+UseParallelGC]) − Machine à plusieurs processeurs et des applications nécessitant un haut taux de rendement. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 30 Quel type de collecteur utiliser? • Concurrent: (-XX:+UseConcMarkSweepGC [-XX:+UseParNewGC]) − Machine à plusieurs processeurs rapides et des applications nécessitant un temps de réponse rapide et constant. • G1: (-XX:+UseG1GC) − Machine à plusieurs processeurs rapides et des applications ayant de larges heaps (>6GB) et un temps de réponse rapide et constant. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 31 Quelle configuration utiliser? Configuration de la Mémoire -Xms${MINHEAP}m -Xmx${MAXHEAP}m -XX:NewSize=${NEWGEN}m -XX:MaxNewSize=${MAXNEWGEN}m -XX:SurvivorRatio=8 -XX(Perm|Metaspace)Size=${PERMGEN}m -XX:Max(Perm|Metaspce)Size=${MAXPERMGEN}m Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 32 Spécification de la mémoire Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 33 Quelle configuration utiliser? Configuration de la Mémoire -XX:ThreadStackSize=512k -XX:ReservedCodeCacheSize=240m (Java 8 :XX+TieredCompilation) Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 34 Quelle configuration utiliser? Configuration de la journalisation • -XX:+PrintGCDetails • -XX:+PrintGCTimeStamps • -XX:+PrintGCDateStamps • -XX:+PrintGCApplicationStartedTime • -XX:+PrintGCApplicationStoppedTime Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 35 Quelle configuration utiliser? Configuration de la journalisation DATE = `date +%Y%m%d_%H%M%S` LOGDIR = /path/…/ -XX:loggc:$LOGDIR/gc_$DATE.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=50M − XX:ErrorFile=$LOGDIR/hs_err_$DATE.log Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 36 Quelle configuration utiliser? Configuration des fils d’exécution (threads) -XX:ParallelGCThreads=n = 8+(nb.coeur-8) x 5/8) -XX:ConcGCThread=n/4 = 1/4 x Parallel -XX:G1ConcRefinementThreads=n = Parallel+1 • Une attention particulière est requise si le serveur est partagé par plusieurs applications. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 37 Quelle configuration utiliser? Configurations optionnelles (journalisation supplémentaire) -XX:+PrintReferenceGC -XX:+PrintTenuringDistribution -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 Note: Sortie vers la console -XX:+TraceClassLoading -XX:+TraceClassUnloading Note: Sortie vers la console Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 38 Quelle configuration utiliser? • Paramètres particuliers pour CMS − XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:+CMSScavengeBeforeRemark • Paramètres particuliers pour G1 -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercentage=45 Ne pas indiquer: -XX:NewSize et -XX:MaxNewSize Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 39 Quels sont les indicateurs de Performance • • • • • • Durée et fréquence des pauses mineurs (GC) Durée et fréquence des pauses majeurs (GC) Temps de réponse de l’application Nombre d’itérations ou de transactions Utilisation CPU du serveur Utilisation mémoire de la JVM Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 40 Différents types de problèmes • HEAP (-Xmx) − java.lang.OutOfMemoryError: Java heap space − java.lang.OutOfMemoryError: GC Overhead limit exceeded: (ParallelOldGC) − java.lang.OutOfMemoryError: Requested array size exceeds VM limit • Non-HEAP (–XXMaxPermSize or –XXMaxMetaspaceSize) − java.lang.OutOfMemoryError: PermGen space. Java 7 − java.lang.OutOfMemoryError: Metadata space. Java 8 • Java Stack (-Xss) − java.lang.StackOverflowError (the stack size is greater than the limit), augmenter la valeur -Xss − java.lang.OutOfMemoryError: unable to create new native thread (too many threads with a large stack), diminuer la valeur -Xss ou augmenter la limite de l’OS. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 41 Différentes saveurs de problèmes • CodeCache (-XX:ReservedCodeCacheSize) − warning: CodeCache is full. Compiler has been disabled. • Espace mémoire du serveur (physique ou virtuelle) − java.lang.OutOfMemoryError: request <size> bytes for <reason>. − java.lang.OutOfMemoryError: <reason> <stack trace> (Native method) Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 42 Structure Mémoire - Java 8 • La génération Permanente est remplacée par la Metaspace − Similaire, mais la Metaspace peut grandir pendant l’exécution du programme (Mémoire Native) Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 43 Java 8 • Les paramètres -XX:PermSize et –XX:MaxPermSize sont ignorés. • Il faut maintenant spécifier: –XX:Metaspace et –XX:MaxMetaspace • Note: Le maximum par défaut est l’espace disponible sur le serveur. Donc, il est important de spécifier le maximum pour ne pas impacter les autres processus du serveur. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 44 Java 8 • -XX:+TieredCompilation est maintenant actif par défaut avec Java 8. • L’option TieredCompilation offre une meilleure performance au démarrage et lors de l’exécution du programme. • Les besoins de la mémoire pour la CodeCache sont plus importants. Donc, faire attention pour ne pas manquer de mémoire car l’impact sur la performance peut être très négative. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 45 Java 8 et G1 • Une nouvelle option intéressante est offerte avec Java 8 et le collecteur G1: -XX:+StringDeduplication. Nécessite une petite surcharge de travaille, mais peut réduire considérablement l’espace utilisé par l’objet String. • Pour le collecteur G1, on spécifie un temps de pause cible au lieu de définir la taille de la nouvelle génération et le ratio entre la nouvelle et la vieille génération. -XX:MaxGCPauseMillis=200 Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 46 Analyse de la Mémoire Les Outils disponibles (Gratuit) • Analyse en temps réel − VisualVM − VisualGC • Analyse en mode hors ligne. − GCViewer Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 48 VisualVM • Java VisualVM est un outil qui fournit un interface visuel pour voir des information détaillées au sujet de l’application qui utilise une machine virtuelle java. • Java VisualVM permet de diagnostique et d’optimiser les applications. • Java Visual VM peut intégrer d’autres outils tel que VisualGC. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 49 Visual VM Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 50 VisualGC – Outil de visualisation • Java VisualGC est un outil qui permet de visualiser les données que la commande jstat peut générer. jstat est un outil très puissant qui permet de faire encore plus. • Avec Java VisualGC, il est possible de voir l’utilisation en temps réel des différentes régions mémoires. • ./visualgc [processid] • Il faut activer l’option -XX:+UsePerfData Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 51 VisualGC Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 52 GCViewer • GCViewer est un outil gratuit et open source qui permet de visualiser les données produits par la machine virtuelle Java avec les options –XX:+PrintGCDetails et – Xloggc:<fichier>. Il calcul aussi les différents métriques reliés à la performance du garbage collector (débit, durée, fréquence des pauses, moyenne, minimum, maximum, etc). • Un outil très utile pour visualiser l’usage mémoire et mesurer la performance du garbage collector. Il suffit de charger le fichier de journalisation pour révéler les informations. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 53 GC Viewer Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 54 Résultat cherché Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 55 Eclipse MAT • Eclipse Memory Analyzer est un outil rapide et riche en fonctionnalités qui permet d’analyser un Heap Dump et de détecter une fuite mémoire. Il permet aussi d’optimiser l’utilisation de la mémoire. Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 56 Optimisation de la mémoire Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 57 Recette Finale • • • • • 1 tasse de serveur 1 choix de collecteur 3 doses de mémoire 2Kg de journalisation 1 batterie de tests • Mélanger le tout avec GCViewer, VisualVM et MAT Strategic Talent Management © 2015 Halogen Software Inc. Confidential – Not to be used, copied or redistributed without Halogen’s prior written permission. 58