SlideShare une entreprise Scribd logo
Khalid ALLILI
Expert technique java/jee http://www.allili.net
Objectifs
 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
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émoire
 L’augmentation de la taille du Heap pouvant aller
jusqu'à un arrêt de la JVM
Pourquoi Surveiller la JVM : Mémoire
 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();
}
}
 Charges CPU
Pourquoi Surveiller la JVM : CPU
 Charges CPU
Pourquoi Surveiller la JVM : CPU
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
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 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
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
Configuration de session
 Wizard de création de connexion
 Wizard de création de connexion
Configuration de session
 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
 É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
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
 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
 Filtrage
 La configuration de la session permet de filtrer les
classes à profiler
Configuration de session
 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
 : 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 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
 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
 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
 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 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
 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
 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
 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
Questions
Jprofiler

Contenu connexe

Tendances

Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring BatchAntoine Rey
 
Microbox : Ma toolbox microservices - Julien Roy
Microbox : Ma toolbox microservices - Julien RoyMicrobox : Ma toolbox microservices - Julien Roy
Microbox : Ma toolbox microservices - Julien Roy
ekino
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring Integration
Antoine Rey
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les bases
Antoine Rey
 
Gatling Tool in Action at DevoxxFR 2012
Gatling Tool in Action at DevoxxFR 2012Gatling Tool in Action at DevoxxFR 2012
Gatling Tool in Action at DevoxxFR 2012
slandelle
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)
Jérôme Tamborini
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
DNG Consulting
 
Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.
AZUG FR
 
JAVA 8
JAVA 8JAVA 8
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
Florian Beaufumé
 
Présentation de Robot framework
Présentation de Robot frameworkPrésentation de Robot framework
Présentation de Robot frameworkgilleslenfant
 
Robot Framework Introduction
Robot Framework IntroductionRobot Framework Introduction
Robot Framework Introduction
laurent bristiel
 
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoiPerf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
pkernevez
 
Automatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot FrameworkAutomatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot Framework
laurent bristiel
 
Spring Batch
Spring BatchSpring Batch
Spring Batch
victor_gallet
 
Multi threadingJava
Multi threadingJavaMulti threadingJava
Multi threadingJava
Nono Woguia Elvadas
 

Tendances (17)

Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring Batch
 
Microbox : Ma toolbox microservices - Julien Roy
Microbox : Ma toolbox microservices - Julien RoyMicrobox : Ma toolbox microservices - Julien Roy
Microbox : Ma toolbox microservices - Julien Roy
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring Integration
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les bases
 
Gatling Tool in Action at DevoxxFR 2012
Gatling Tool in Action at DevoxxFR 2012Gatling Tool in Action at DevoxxFR 2012
Gatling Tool in Action at DevoxxFR 2012
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
 
Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.
 
JAVA 8
JAVA 8JAVA 8
JAVA 8
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Mockito Chti JUG
Mockito Chti JUGMockito Chti JUG
Mockito Chti JUG
 
Présentation de Robot framework
Présentation de Robot frameworkPrésentation de Robot framework
Présentation de Robot framework
 
Robot Framework Introduction
Robot Framework IntroductionRobot Framework Introduction
Robot Framework Introduction
 
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoiPerf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
 
Automatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot FrameworkAutomatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot Framework
 
Spring Batch
Spring BatchSpring Batch
Spring Batch
 
Multi threadingJava
Multi threadingJavaMulti threadingJava
Multi threadingJava
 

Similaire à Jprofiler

OW2 JASMINe
OW2 JASMINeOW2 JASMINe
OW2 JASMINe
Guillaume Sauthier
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
ENSET, Université Hassan II Casablanca
 
Rapport tp2 j2ee
Rapport tp2 j2eeRapport tp2 j2ee
Rapport tp2 j2ee
Soukaina Boujadi
 
Présentation nouveauté java7
Présentation nouveauté java7Présentation nouveauté java7
Présentation nouveauté java7
Cynapsys It Hotspot
 
#5 Java EE5 Client Lourd et Smart Client
#5 Java EE5  Client Lourd  et Smart Client#5 Java EE5  Client Lourd  et Smart Client
#5 Java EE5 Client Lourd et Smart Client
Guillaume Sauthier
 
Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux ServletsFrançois Charoy
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
Korteby Farouk
 
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursHoracio Gonzalez
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Mejdeddine Bouzouita
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer Faces
JS Bournival
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hoodsvuillet
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un blian
tareq
 
L'écosystème Java
L'écosystème JavaL'écosystème Java
L'écosystème Java
teejug
 
Green System University - Development JDEdwards (French Version) - Tome2
Green System University - Development JDEdwards (French Version) - Tome2Green System University - Development JDEdwards (French Version) - Tome2
Green System University - Development JDEdwards (French Version) - Tome2
Minh-Tri Nguyen
 
Java Content Repository avec Jackrabbit
Java Content Repository avec JackrabbitJava Content Repository avec Jackrabbit
Java Content Repository avec Jackrabbit
Emmanuel Hugonnet
 
BordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets JavaBordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets JavaCamblor Frédéric
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
Paris Salesforce Developer Group
 
Alphorm.com Formation Palo Alto : Firewall Troubleshooting
Alphorm.com Formation Palo Alto : Firewall TroubleshootingAlphorm.com Formation Palo Alto : Firewall Troubleshooting
Alphorm.com Formation Palo Alto : Firewall Troubleshooting
Alphorm
 

Similaire à Jprofiler (20)

OW2 JASMINe
OW2 JASMINeOW2 JASMINe
OW2 JASMINe
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Rapport tp2 j2ee
Rapport tp2 j2eeRapport tp2 j2ee
Rapport tp2 j2ee
 
Présentation nouveauté java7
Présentation nouveauté java7Présentation nouveauté java7
Présentation nouveauté java7
 
#5 Java EE5 Client Lourd et Smart Client
#5 Java EE5  Client Lourd  et Smart Client#5 Java EE5  Client Lourd  et Smart Client
#5 Java EE5 Client Lourd et Smart Client
 
Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux Servlets
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
 
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer Faces
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un blian
 
L'écosystème Java
L'écosystème JavaL'écosystème Java
L'écosystème Java
 
Green System University - Development JDEdwards (French Version) - Tome2
Green System University - Development JDEdwards (French Version) - Tome2Green System University - Development JDEdwards (French Version) - Tome2
Green System University - Development JDEdwards (French Version) - Tome2
 
Java Content Repository avec Jackrabbit
Java Content Repository avec JackrabbitJava Content Repository avec Jackrabbit
Java Content Repository avec Jackrabbit
 
BordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets JavaBordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets Java
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 
Jms.back.to.basic
Jms.back.to.basicJms.back.to.basic
Jms.back.to.basic
 
Alphorm.com Formation Palo Alto : Firewall Troubleshooting
Alphorm.com Formation Palo Alto : Firewall TroubleshootingAlphorm.com Formation Palo Alto : Firewall Troubleshooting
Alphorm.com Formation Palo Alto : Firewall Troubleshooting
 

Plus de Khalid ALLILI

Logiciels Libres: quel opportunités pour les marocains ?
Logiciels Libres: quel opportunités pour les marocains ?Logiciels Libres: quel opportunités pour les marocains ?
Logiciels Libres: quel opportunités pour les marocains ?
Khalid ALLILI
 
Corba
CorbaCorba
Partager wana
Partager wanaPartager wana
Partager wana
Khalid ALLILI
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
Khalid ALLILI
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
Khalid ALLILI
 
Mysql Apche PHP sous linux
Mysql Apche PHP sous linuxMysql Apche PHP sous linux
Mysql Apche PHP sous linux
Khalid ALLILI
 
Introduction au Bluetouth
Introduction au BluetouthIntroduction au Bluetouth
Introduction au Bluetouth
Khalid ALLILI
 
upload en PHP
upload en PHPupload en PHP
upload en PHP
Khalid ALLILI
 
Oracle Database Vault
Oracle Database VaultOracle Database Vault
Oracle Database Vault
Khalid ALLILI
 
Sérialisation, Persistance Et Mapping Objet Relationnel
Sérialisation, Persistance Et Mapping Objet RelationnelSérialisation, Persistance Et Mapping Objet Relationnel
Sérialisation, Persistance Et Mapping Objet Relationnel
Khalid ALLILI
 

Plus de Khalid ALLILI (10)

Logiciels Libres: quel opportunités pour les marocains ?
Logiciels Libres: quel opportunités pour les marocains ?Logiciels Libres: quel opportunités pour les marocains ?
Logiciels Libres: quel opportunités pour les marocains ?
 
Corba
CorbaCorba
Corba
 
Partager wana
Partager wanaPartager wana
Partager wana
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
Mysql Apche PHP sous linux
Mysql Apche PHP sous linuxMysql Apche PHP sous linux
Mysql Apche PHP sous linux
 
Introduction au Bluetouth
Introduction au BluetouthIntroduction au Bluetouth
Introduction au Bluetouth
 
upload en PHP
upload en PHPupload en PHP
upload en PHP
 
Oracle Database Vault
Oracle Database VaultOracle Database Vault
Oracle Database Vault
 
Sérialisation, Persistance Et Mapping Objet Relationnel
Sérialisation, Persistance Et Mapping Objet RelationnelSérialisation, Persistance Et Mapping Objet Relationnel
Sérialisation, Persistance Et Mapping Objet Relationnel
 

Jprofiler

  • 1. Khalid ALLILI Expert technique java/jee http://www.allili.net
  • 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(); } }
  • 9.  Charges CPU Pourquoi Surveiller la JVM : CPU
  • 10.  Charges CPU Pourquoi Surveiller la JVM : CPU
  • 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
  • 13. JProfiler : Outil de profilage  GUI Intuitif
  • 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
  • 16. Configuration de session  Wizard de création de connexion
  • 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