Post on 16-Apr-2017
Khalid ALLILIExpert technique java/jee http://www.allili.net
Objectifs
Pourquoi surveiller la JVMJProfiler : Outil de profilageModes de profilageConfiguration de sessionAnalyse des résultats
CPUMémoireThreadsBase de donnéesJEE
Sommaire
Pourquoi Surveiller la JVM
Pourquoi Surveiller la JVM : Temps de réponse
Exemple de méthodes de concaténation private static void concatString() { String s = ""; for (int i = 0; i < 100000; ++i) { s = s + "a"; } }
private static void concatStringBuilder() { final StringBuilder sb = new StringBuilder(); for (int i = 0; i < 100000; ++i) { sb.append("a"); } }
private static void concatStringBuffer() { final StringBuffer sb = new StringBuffer(); sb.setLength(0); for (int i = 0; i < 100000; ++i) { sb.append("a"); } }
Pourquoi Surveiller la JVM : Temps de réponse
Exécution des méthodes de concaténation
Temps de réponse
public static void main(final String[] args) { concatString(); concatStringBuffer(); concatStringBuilder(); }
Structure de la mémoire JVM
Fuite de la mémoireL’augmentation de la taille du Heap pouvant
aller jusqu'à un arrêt de la JVM
Pourquoi Surveiller la JVM : Mémoire
Exemple de threads10 threads exécutés en parallèle
Pourquoi Surveiller la JVM : CPU
public static void main(final String[] args) {for (int i = 0; i < 10; i++) {new Thread(new Runnable() {@Overridepublic void run() {System.out.println("Thread " + Thread.currentThread().getName() + " started");double val = 10;
for (int t = 0; t < 100000; t++) {System.out.println(Math.atan(Math.sqrt(Math.pow(val, 10))));
}}}).start();}}
Charges CPU
Pourquoi Surveiller la JVM : CPU
Charges CPU
Pourquoi Surveiller la JVM : CPU
JProfiler : Outil de profilage
Produit ej-technologieshttp://www.ej-technologies.com/products/jprofiler/
overview.html
ALL-IN-ONE java profilerConnexion à la JVM
Profilage offline supporté
Aperçu sur le contenu de la JVM Heap dump
Dégradation moins gouteuse
JProfiler : Outil de profilage
Support JEE complet
Plugin pour IDE
JProfiler : Outil de profilage
GUI Intuitif
JProfiler : Modes de profilage
Mode attaché Certaines fonctionnalités ne sont plus disponiblesPlus couteux : temps et ressources
Mode profilage au démarrage Utilisation d’un agent de profilage jprofilertiLa JVM attend une connexion de JProfilerConfiguration rarement manuelle
JProfiler : Modes de profilage
Mode profilage préparéJProfiler se connecte à la JVM après son
démarrage : nowaitToutes les fonctionnalités sont disponiblesMoins couteux
Mode offline Profilage automatiséActivation des triggersCréation des snapshots de la JVM
Configuration de session
Wizard de création de connexion
Wizard de création de connexion
Configuration de session
Instrumentation dynamiqueInjection des bytes codes dans les méthodes
des classes profiléesClasses non profilées ne sont pas surchargéesPlus souvent le meilleur choix :
L’ensemble des classes de la JRE ne sont pas profilées
Mesures très détaillées avec faible overhead
Configuration de session
Échantillonnage Snapshots périodiques de la JVMMoins couteux par rapports à l’instrumentationMieux adaptés pour un profilage sans filtresPerte de certains indicateurs :
Nombre d’invocation Pas d’information sur les in/out des méthodes
Configuration de session
Configuration de session
Serveur Distant
jprofilerti Config.xml
-agentpath:C:\jprofiler8\agent\bin\windows\jprofilerti.dll=port=8849,nowait,id=104,config=C:\jprofiler8\configFile\config.xml
Paramètre JVM :
Lancement des tests de performances
Profilage de la JVM
FiltrageDétermine le niveau de détail du profilage
Distinction entre le code applicatif et le code des bibliothéque
Réduit l’overhead de JProfiler
Configuration de session
FiltrageLa configuration de la session permet de filtrer
les classes à profiler
Configuration de session
TriggersDéfinie toutes les actions de profilageStocké dans le fichier de configuration
transmis à l’agentUtiles pour le mode offline
Configuration de session
: Qui alloue quel objet
: Snapshot instantané de la
mémoire heap
: Appels de méthode et des mesures
de temps
: Détail des statuts et cycles de vie
des threads
Analyse des résultats
: Détail des moniteurs et verrous
: Télémétrie cumulée de la JVM
: Détail des requêtes vers la base de
données
: Détail des composants JEE
(Servlet, JMS, …)
Analyse des résultats
Tous les objetsVue sur toutes les classes chargées ainsi que le
nombres des objets crées
Arbre d’allocation : Arbre cumulé des communication entres threads
basé sur les allocations des objets
Snapshot de la mémoire heap
Analyse des résultats : Mémoire
Objets enregistrés : Zoom sur les objets enregistrés dans la mémoire
Heap
Trace des classesGraphe indiquant un nombre arbitraire des
instance d’une classe données par rapport au temps
Hot spot d’allocationAperçu sur la liste des méthodes où l’objet
a été alloué
Analyse des résultats : Mémoire
Arbre des appelsArbre des appels entre méthodes selon les
threads
Hot spotAperçu sur la liste des appels d’un type donné
Graphe d’appelZoom graphique sur les appels d’un objets
données
Analyse des résultats : CPU
Statistique de méthodes :Informations statistiques sur les appels à une
méthode
Traces des appels :Trace des appels asynchrones entre composants
Analyse des résultats : CPU
Historique des threads :Aperçu sur l’historique de l’ensemble des threads
par ordre de création
Moniteur des threads :Liste filtrée de tous les threads avec les
informations sur le temps d’exécution et leurs statuts
Snapshot des threads
Analyse des résultats : Threads
Graphe des verrous en cours :
Séquence historique des verrous enregistrés
dans la JVM
Analyse des résultats : Verrous
Moniteurs actuels:Liste des moniteurs actuels qui sont impliqués
dans un événement en attente ou verrouillé
Séquence historique des moniteurs
Enregistrement des statistiques
Analyse des résultats : Moniteurs
Graphe d’utilisation de la mémoire Heap
Graphe des objets enregistrés dans la mémoire Heap
Graphe des objets créés et supprimer par GC
Analyse des résultats : Télémétrie
Graphe d’évolution de l’activité de la GCExécution de la GC
Graphe des classes chargées dans la JVM
Graphe des threads vivants dans la JVM
Graphe de la charge CPU consommé par le processus profilé
Analyse des résultats : Télémétrie
Indicateurs des instructions JDBCStatement, Preapred statement, batch executionTélémétrie, Hot spot, connexion, évènement et
trace
Indicateurs sur la couche JPA:Profilage des objets annotésHot spot, télémétrie, évènement et trace
Support des base de données NoSQL
Analyse des résultats : JDBC
Servlet Détecte et trace l’activité des servlets appelées
JNDITrace les requêtes JNDI dans l’arbre des appels
et les hot spots
JMS Description des messages JMS dans l’arbre des
appels
Analyse des résultats : JEE
RMIVisualise les appels du serveur RMI dans l’arbre
des appels
Service webArbre des appels aux services webService web basé sur:
JAX-WS-RI AXIS2 Apache CXF
Analyse des résultats : JEE
Questions
MERCI