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

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

Embed Size (px)

DESCRIPTION

Présentation réalisé pour la Breizhcamp 2012

Citation preview

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

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

Page 2: 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

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

● 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

Page 4: Mesurer la performance dans le milieu hostile du développement Java
Page 5: Mesurer la performance dans le milieu hostile du développement Java
Page 6: Mesurer la performance dans le milieu hostile du développement Java
Page 7: Mesurer la performance dans le milieu hostile du développement Java
Page 8: Mesurer la performance dans le milieu hostile du développement Java

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

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

20% du code totalise 80% du temps d'exécution

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

Et comment fait-on pour connaitre ces 20% ?

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

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

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

Et comment fait-on pour analyser ces 20% ?

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

Approfondissez les choses Donne un poisson à un homme, tu le nourris pour un jour. Apprends-lui à pêcher, tu le chuck norris

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

Apprenez comment les choses fonctionnent et pas seulement comment les utiliser

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

Un exemple ?

Le comportement d'une JVM

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

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

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

Évitez les Major GC (Full Garbage collector)

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

Fonctionnement simplifié du GC

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

Fonctionnement simplifié du GC

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

Fonctionnement simplifié du GC

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

Fonctionnement simplifié du GC

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

Fonctionnement simplifié du GC

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

Fonctionnement simplifié du GC

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

Fonctionnement simplifié du GC

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

Fonctionnement simplifié du GC

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

Fonctionnement simplifié du GC

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

Fonctionnement simplifié du GC

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

Fonctionnement simplifié du GC

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

Fonctionnement simplifié du GC

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

Fonctionnement simplifié du GC

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

Fonctionnement simplifié du GC

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

Fonctionnement simplifié du GC

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

É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

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

Un autre exemple ?

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

L'architecture mémoire de la JVM ...

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

... ou pas

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

Code Scala HTML Bytecode Javascript Framework XML CSS Groovy Binaire Java Class Java EE SQL Jython

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

Code HTML Combined files Gzip Cache-Control header CSS sprites DOM Javascript Framework XML CSS Chargement tardif CDN

Page 39: Mesurer la performance dans le milieu hostile du développement Java
Page 40: Mesurer la performance dans le milieu hostile du développement Java
Page 41: Mesurer la performance dans le milieu hostile du développement Java
Page 42: Mesurer la performance dans le milieu hostile du développement Java
Page 43: Mesurer la performance dans le milieu hostile du développement Java

Code SonarJ Couplage Xradar Findbugs Revue de code Sonar PMD Checkstyle JIRA Squid Clover NCSS Cobertura Couverture de code

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

FindBugs

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

FindBugs

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

FindBugs

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

Code VisualGC TPTP ContiPerf jinfo DBunit Hyperic jstat VisualVM JConsole Netbeans Profiler Perf4j jps TDA Audit de code Profiler

Page 48: Mesurer la performance dans le milieu hostile du développement Java
Page 49: Mesurer la performance dans le milieu hostile du développement Java
Page 50: Mesurer la performance dans le milieu hostile du développement Java
Page 51: Mesurer la performance dans le milieu hostile du développement Java

Databene ContiPerfimport 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);

} }

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

Code SQL Index Oracle MySQL SGA Benerator Normalisation Mapping JMeter Tuning Full scan Transaction Select

Page 53: Mesurer la performance dans le milieu hostile du développement Java
Page 54: Mesurer la performance dans le milieu hostile du développement Java

select * from t_conducteur left join t_voiture on id_conducteur=conducteur_fk where couleur = 'rouge'

x 200

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

Databene Benerator

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

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>

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

Code Test aux limites VisualGC LoadRunner JConsole JMeter Test de charge Monitoring Plan de test Ramp up

Page 58: Mesurer la performance dans le milieu hostile du développement Java
Page 59: Mesurer la performance dans le milieu hostile du développement Java

Apache JMeter

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

Paramètres

Transactions

Requêtes HTTP

Page 61: Mesurer la performance dans le milieu hostile du développement Java
Page 62: Mesurer la performance dans le milieu hostile du développement Java

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

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

Pour aller plus loinBeneratorhttp://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éeshttp://blog.aliecom.com/pourquoi-faire-attention-au-volume-du-jeu-de-donnees-en-base/

ContiPerfhttp://blog.aliecom.com/contiperf/

Apache JMeterhttp://blog.aliecom.com/presentation-de-loutil-apache-jmeter-partie-1/http://blog.aliecom.com/presentation-de-loutil-apache-jmeter-partie-2/

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