Optimisation d`une Machine Virtuelle Java Les ingrédients pour une

publicité
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
Téléchargement