3. Pourquoi surveiller la JVM
JProfiler : Outil de profilage
Modes de profilage
Configuration de session
Analyse des résultats
CPU
Mémoire
Threads
Base de données
JEE
Sommaire
5. 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");
}
}
6. 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();
}
7. Structure de la mémoire JVM
Fuite de la mémoire
L’augmentation de la taille du Heap pouvant aller
jusqu'à un arrêt de la JVM
Pourquoi Surveiller la JVM : Mémoire
8. Exemple de threads
10 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() {
@Override
public 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();
}
}
11. JProfiler : Outil de profilage
Produit ej-technologies
http://www.ej-technologies.com/products/jprofiler/overview.html
ALL-IN-ONE java profiler
Connexion à la JVM
Profilage offline supporté
Aperçu sur le contenu de la JVM
Heap dump
Dégradation moins gouteuse
12. JProfiler : Outil de profilage
Support JEE complet
Plugin pour IDE
14. JProfiler : Modes de profilage
Mode attaché
Certaines fonctionnalités ne sont plus disponibles
Plus couteux : temps et ressources
Mode profilage au démarrage
Utilisation d’un agent de profilage jprofilerti
La JVM attend une connexion de JProfiler
Configuration rarement manuelle
15. JProfiler : Modes de profilage
Mode profilage préparé
JProfiler se connecte à la JVM après son démarrage : nowait
Toutes les fonctionnalités sont disponibles
Moins couteux
Mode offline
Profilage automatisé
Activation des triggers
Création des snapshots de la JVM
17. Wizard de création de connexion
Configuration de session
18. Instrumentation dynamique
Injection des bytes codes dans les méthodes des classes
profilées
Classes non profilées ne sont pas surchargées
Plus 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
19. Échantillonnage
Snapshots périodiques de la JVM
Moins couteux par rapports à l’instrumentation
Mieux adaptés pour un profilage sans filtres
Perte de certains indicateurs :
Nombre d’invocation
Pas d’information sur les in/out des méthodes
Configuration de session
20. Configuration de session
Serveur Distant
jprofilerti Config.xml
-agentpath:C:jprofiler8agentbinwindowsjprofilerti.dll=port=8849,nowait,id=104,config=C:jprofiler8
configFileconfig.xml
Paramètre JVM :
Lancement des tests de performances
Profilage de la JVM
21. Filtrage
Dé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
22. Filtrage
La configuration de la session permet de filtrer les
classes à profiler
Configuration de session
23. Triggers
Définie toutes les actions de profilage
Stocké dans le fichier de configuration transmis à l’agent
Utiles pour le mode offline
Configuration de session
24. : 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
25. : 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
26. Tous les objets
Vue 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
27. Objets enregistrés :
Zoom sur les objets enregistrés dans la mémoire Heap
Trace des classes
Graphe indiquant un nombre arbitraire des instance d’une
classe données par rapport au temps
Hot spot d’allocation
Aperçu sur la liste des méthodes où l’objet
a été alloué
Analyse des résultats : Mémoire
28. Arbre des appels
Arbre des appels entre méthodes selon les threads
Hot spot
Aperçu sur la liste des appels d’un type donné
Graphe d’appel
Zoom graphique sur les appels d’un objets données
Analyse des résultats : CPU
29. 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
30. 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
31. Graphe des verrous en cours :
Séquence historique des verrous enregistrés
dans la JVM
Analyse des résultats : Verrous
32. 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
33. 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
34. Graphe d’évolution de l’activité de la GC
Exé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
35. Indicateurs des instructions JDBC
Statement, Preapred statement, batch execution
Télémétrie, Hot spot, connexion, évènement et trace
Indicateurs sur la couche JPA:
Profilage des objets annotés
Hot spot, télémétrie, évènement et trace
Support des base de données NoSQL
Analyse des résultats : JDBC
36. Servlet
Détecte et trace l’activité des servlets appelées
JNDI
Trace 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
37. RMI
Visualise les appels du serveur RMI dans l’arbre des appels
Service web
Arbre des appels aux services web
Service web basé sur:
JAX-WS-RI
AXIS2
Apache CXF
Analyse des résultats : JEE