SlideShare une entreprise Scribd logo
1  sur  64
Télécharger pour lire hors ligne
Mesurer la performance
dans le milieu hostile
du développement Java
Antonio Gomes Rodrigues
@ra0077


Consultant chez Aliecom


Rédacteur pour developpez.com


Conférencier                    0
●   Le milieu hostile du développement Java

●   La loi de Pareto

●   Sur quoi se focaliser

●   Comment interpréter les résultats

●   Tester la performance de votre code
La loi de Pareto La loi
de Murphy La loi de
Carlson La loi de
Parkinson La loi d'Illich
La loi de Laborit La loi
de Fraisse
20% du code totalise
      80% du temps d'exécution
Et comment fait-on pour
            connaitre ces 20% ?
Ne      devinez     pas,
mesurez      E = mc²
S = (b*h)/2 a = b S = c²
S = (h * (b+B))/2 a+b=c
P = 2*Pi*r² a² + b² = c²
La solution est 42
Et comment fait-on pour
             analyser ces 20% ?
Approfondissez       les
choses      Donne     un
poisson à un homme, tu
le nourris pour un jour.
Apprends-lui à pêcher,
tu le chuck norris
Apprenez comment les choses
fonctionnent et pas seulement
comment les utiliser
Un exemple ?

   Le comportement d'une JVM
JVM Tenure age Stack
Architecture   mémoire
Allocator Full GC Tilt
ratio JVM générationel
-Xmx Minor GC Tilt ratio
Mark -Xss JIT Sweep
Compaction -verbosegc
Évitez les Major GC
(Full Garbage collector)
Fonctionnement simplifié du GC
Fonctionnement simplifié du GC
Fonctionnement simplifié du GC
Fonctionnement simplifié du GC
Fonctionnement simplifié du GC
Fonctionnement simplifié du GC
Fonctionnement simplifié du GC
Fonctionnement simplifié du GC
Fonctionnement simplifié du GC
Fonctionnement simplifié du GC
Fonctionnement simplifié du GC
Fonctionnement simplifié du GC
Fonctionnement simplifié du GC
Fonctionnement simplifié du GC
Fonctionnement simplifié du GC
Évitez les FullGC

Faire attention aux objets vivants longtemps
(pool, session...)

Faire attention aux gros objets

Essayer de maximiser le nombre d’objets
collectés dans la New Generation

Éviter les objets de durée de vie
intermédiaire
Un autre exemple ?
L'architecture mémoire de la JVM ...
... ou pas
Code    Scala   HTML
Bytecode     Javascript
Framework XML CSS
Groovy Binaire Java
Class Java EE SQL
Jython
Code HTML Combined
files   Gzip   Cache-
Control header CSS
sprites DOM Javascript
Framework XML CSS
Chargement tardif CDN
Code SonarJ Couplage
Xradar Findbugs Revue
de code Sonar PMD
Checkstyle JIRA Squid
Clover NCSS Cobertura
Couverture de code
FindBugs
FindBugs
FindBugs
Code VisualGC TPTP
ContiPerf jinfo DBunit
Hyperic jstat VisualVM
JConsole        Netbeans
Profiler Perf4j jps TDA
Audit de code Profiler
Databene ContiPerf
import org.junit.*;
import org.databene.contiperf.*;

public class OwnerTestsPerf {

        @Rule
        public ContiPerfRule i = new ContiPerfRule();

        @Test
        @PerfTest(threads = 10, duration = 60000,
                    rampUp = 100, warmUp = 2000)

        @Required(max = 1000, average = 250)
        public void testHasPet() {
           Owner owner = new Owner();
           Pet fido = new Pet();
           fido.setName("Fido");
           owner.addPet(fido);
    }
}
Code SQL Index Oracle
MySQL SGA Benerator
Normalisation Mapping
JMeter Tuning Full scan
Transaction Select
select * from t_conducteur
left join t_voiture on id_conducteur=conducteur_fk
where couleur = 'rouge'




                  x 200
Databene Benerator
Databene Benerator
 <database id="db" url="jdbc:mysql://localhost:3306/test" ... />

 <generate type="t_conducteur" count="1000" consumer="db" >
 <variable name="individu"
 generator="org.databene.domain.person.PersonGenerator" />
     <id name="id_conducteur" generator="idGen" />
     <attribute name="prenom" script="individu.givenName" />
     <attribute name="nom" script="individu.familyName" />
     <attribute name="email" script="individu.email" />
 </generate>

 <generate type="t_voiture" count="3000" consumer="db">
     <id name="id_voiture" generator="idGen" />
     <attribute name="prix" min="8000" max="200000" />
     <reference name="couleur" values="'rouge','verte'" />
     <reference name="conducteur_fk" targetType="t_conducteur"
 source="db" distribution="expand" cyclic="true" />
 </generate>
Code Test aux limites
VisualGC LoadRunner
JConsole JMeter Test
de charge Monitoring
Plan de test Ramp up
Apache JMeter
Paramètres



Transactions



Requêtes HTTP
Mesurez Mesurez Mesurez Mesurez
Mesurez Mesurez Mesurez Mesurez
Mesurez Mesurez Mesurez Mesurez

Et si possible avec un jeu de
données cohérent et une bonne
méthodologie
Pour aller plus loin
Benerator
http://blog.aliecom.com/presentation-de-loutil-de-generation-de-jeux-de-
donnees-benerator/

System.gc()
http://blog.aliecom.com/pourquoi-il-est-dangereux-dutiliser-system-gc/

Volume du jeu de données
http://blog.aliecom.com/pourquoi-faire-attention-au-volume-du-jeu-de-
donnees-en-base/

ContiPerf
http://blog.aliecom.com/contiperf/

Apache JMeter
http://blog.aliecom.com/presentation-de-loutil-apache-jmeter-partie-1/
http://blog.aliecom.com/presentation-de-loutil-apache-jmeter-partie-2/
Mesurer la performance dans le milieu hostile du développement Java

Contenu connexe

Tendances

Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Normandy JUG
 
Poza 2019 11-21-java_oueneston
Poza 2019 11-21-java_ouenestonPoza 2019 11-21-java_oueneston
Poza 2019 11-21-java_ouenestonJozaIT
 
Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Publicis Sapient Engineering
 
WS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaWS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaOlivier BAZOUD
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Jean-Michel Doudoux
 
Breizhjug spring batch 2011
Breizhjug spring batch 2011Breizhjug spring batch 2011
Breizhjug spring batch 2011Olivier BAZOUD
 

Tendances (7)

Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
 
Poza 2019 11-21-java_oueneston
Poza 2019 11-21-java_ouenestonPoza 2019 11-21-java_oueneston
Poza 2019 11-21-java_oueneston
 
Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement
 
WS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaWS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - Xebia
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8
 
Spring Batch Avance
Spring Batch AvanceSpring Batch Avance
Spring Batch Avance
 
Breizhjug spring batch 2011
Breizhjug spring batch 2011Breizhjug spring batch 2011
Breizhjug spring batch 2011
 

Similaire à Mesurer la performance dans le milieu hostile du développement Java

JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013Romain Linsolas
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB MongoDB
 
Perfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui ramePerfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui ramebleporini
 
Comment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerComment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerDamien Seguy
 
gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !Carles Sistare
 
gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!David Caramelo
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPrestaShop
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?PALO IT
 
Breizhcamp : Guide de survie du développeur dans une application (Java) qui rame
Breizhcamp : Guide de survie du développeur dans une application (Java) qui rameBreizhcamp : Guide de survie du développeur dans une application (Java) qui rame
Breizhcamp : Guide de survie du développeur dans une application (Java) qui ramebleporini
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLHervé Leclerc
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
Spark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystSpark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystMathieu Goeminne
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans DrupalAdyax
 

Similaire à Mesurer la performance dans le milieu hostile du développement Java (20)

JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB
 
LyonJUG-2023-v1.0.pdf
LyonJUG-2023-v1.0.pdfLyonJUG-2023-v1.0.pdf
LyonJUG-2023-v1.0.pdf
 
Perfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui ramePerfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui rame
 
Tour d'horizon des tests
Tour d'horizon des testsTour d'horizon des tests
Tour d'horizon des tests
 
ParisJUG-2022-v0.4.pdf
ParisJUG-2022-v0.4.pdfParisJUG-2022-v0.4.pdf
ParisJUG-2022-v0.4.pdf
 
Comment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerComment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguer
 
gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !
 
gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
 
Breizhcamp : Guide de survie du développeur dans une application (Java) qui rame
Breizhcamp : Guide de survie du développeur dans une application (Java) qui rameBreizhcamp : Guide de survie du développeur dans une application (Java) qui rame
Breizhcamp : Guide de survie du développeur dans une application (Java) qui rame
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQL
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
Drools et les moteurs de règles
Drools et les moteurs de règlesDrools et les moteurs de règles
Drools et les moteurs de règles
 
Spark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystSpark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et Catalyst
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 

Mesurer la performance dans le milieu hostile du développement Java