Jprofiler
-
Upload
khalid-allili -
Category
Technology
-
view
358 -
download
4
Transcript of Jprofiler
![Page 1: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/1.jpg)
Khalid ALLILIExpert technique java/jee http://www.allili.net
![Page 2: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/2.jpg)
Objectifs
![Page 3: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/3.jpg)
Pourquoi surveiller la JVMJProfiler : Outil de profilageModes de profilageConfiguration de sessionAnalyse des résultats
CPUMémoireThreadsBase de donnéesJEE
Sommaire
![Page 4: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/4.jpg)
Pourquoi Surveiller la JVM
![Page 5: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/5.jpg)
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"); } }
![Page 6: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/6.jpg)
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(); }
![Page 7: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/7.jpg)
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
![Page 8: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/8.jpg)
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();}}
![Page 9: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/9.jpg)
Charges CPU
Pourquoi Surveiller la JVM : CPU
![Page 10: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/10.jpg)
Charges CPU
Pourquoi Surveiller la JVM : CPU
![Page 11: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/11.jpg)
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
![Page 12: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/12.jpg)
JProfiler : Outil de profilage
Support JEE complet
Plugin pour IDE
![Page 13: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/13.jpg)
JProfiler : Outil de profilage
GUI Intuitif
![Page 14: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/14.jpg)
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
![Page 15: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/15.jpg)
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
![Page 16: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/16.jpg)
Configuration de session
Wizard de création de connexion
![Page 17: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/17.jpg)
Wizard de création de connexion
Configuration de session
![Page 18: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/18.jpg)
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
![Page 19: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/19.jpg)
É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
![Page 20: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/20.jpg)
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
![Page 21: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/21.jpg)
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
![Page 22: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/22.jpg)
FiltrageLa configuration de la session permet de filtrer
les classes à profiler
Configuration de session
![Page 23: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/23.jpg)
TriggersDéfinie toutes les actions de profilageStocké dans le fichier de configuration
transmis à l’agentUtiles pour le mode offline
Configuration de session
![Page 24: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/24.jpg)
: 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
![Page 25: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/25.jpg)
: 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
![Page 26: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/26.jpg)
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
![Page 27: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/27.jpg)
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
![Page 28: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/28.jpg)
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
![Page 29: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/29.jpg)
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
![Page 30: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/30.jpg)
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
![Page 31: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/31.jpg)
Graphe des verrous en cours :
Séquence historique des verrous enregistrés
dans la JVM
Analyse des résultats : Verrous
![Page 32: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/32.jpg)
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
![Page 33: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/33.jpg)
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
![Page 34: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/34.jpg)
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
![Page 35: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/35.jpg)
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
![Page 36: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/36.jpg)
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
![Page 37: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/37.jpg)
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
![Page 38: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/38.jpg)
Questions
![Page 39: Jprofiler](https://reader035.fdocuments.net/reader035/viewer/2022062523/58f2e91f1a28ab4b5d8b45b9/html5/thumbnails/39.jpg)
MERCI