Mesurer la performancedans le milieu hostiledu développement Java
Antonio Gomes Rodrigues@ra0077Consultant chez AliecomRédacteur pour developpez.comConférencier                    0
●   Le milieu hostile du développement Java●   La loi de Pareto●   Sur quoi se focaliser●   Comment interpréter les résult...
La loi de Pareto La loide Murphy La loi deCarlson La loi deParkinson La loi dIllichLa loi de Laborit La loide Fraisse
20% du code totalise      80% du temps dexé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=cP = 2*Pi*r² a² + b² = c²La solu...
Et comment fait-on pour             analyser ces 20% ?
Approfondissez       leschoses      Donne     unpoisson à un homme, tule nourris pour un jour.Apprends-lui à pêcher,tu le ...
Apprenez comment les chosesfonctionnent et pas seulementcomment les utiliser
Un exemple ?   Le comportement dune JVM
JVM Tenure age StackArchitecture   mémoireAllocator Full GC Tiltratio JVM générationel-Xmx Minor GC Tilt ratioMark -Xss JI...
É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 FullGCFaire attention aux objets vivants longtemps(pool, session...)Faire attention aux gros objetsEssayer de m...
Un autre exemple ?
Larchitecture mémoire de la JVM ...
... ou pas
Code    Scala   HTMLBytecode     JavascriptFramework XML CSSGroovy Binaire JavaClass Java EE SQLJython
Code HTML Combinedfiles   Gzip   Cache-Control header CSSsprites DOM JavascriptFramework XML CSSChargement tardif CDN
Code SonarJ CouplageXradar Findbugs Revuede code Sonar PMDCheckstyle JIRA SquidClover NCSS CoberturaCouverture de code
FindBugs
FindBugs
FindBugs
Code VisualGC TPTPContiPerf jinfo DBunitHyperic jstat VisualVMJConsole        NetbeansProfiler Perf4j jps TDAAudit de code...
Databene ContiPerfimport org.junit.*;import org.databene.contiperf.*;public class OwnerTestsPerf {        @Rule        pub...
Code SQL Index OracleMySQL SGA BeneratorNormalisation MappingJMeter Tuning Full scanTransaction Select
select * from t_conducteurleft join t_voiture on id_conducteur=conducteur_fkwhere couleur = rouge                  x 200
Databene Benerator
Databene Benerator <database id="db" url="jdbc:mysql://localhost:3306/test" ... /> <generate type="t_conducteur" count="10...
Code Test aux limitesVisualGC LoadRunnerJConsole JMeter Testde charge MonitoringPlan de test Ramp up
Apache JMeter
ParamètresTransactionsRequêtes HTTP
Mesurez Mesurez Mesurez MesurezMesurez Mesurez Mesurez MesurezMesurez Mesurez Mesurez MesurezEt si possible avec un jeu de...
Pour aller plus loinBeneratorhttp://blog.aliecom.com/presentation-de-loutil-de-generation-de-jeux-de-donnees-benerator/Sys...
Mesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement Java
Mesurer la performance dans le milieu hostile du développement Java
Prochain SlideShare
Chargement dans…5
×

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

3 785 vues

Publié le

Présentation réalisé pour la Breizhcamp 2012

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
3 785
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1 998
Actions
Partages
0
Téléchargements
25
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

  1. 1. Mesurer la performancedans le milieu hostiledu développement Java
  2. 2. Antonio Gomes Rodrigues@ra0077Consultant chez AliecomRédacteur pour developpez.comConférencier 0
  3. 3. ● 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
  4. 4. La loi de Pareto La loide Murphy La loi deCarlson La loi deParkinson La loi dIllichLa loi de Laborit La loide Fraisse
  5. 5. 20% du code totalise 80% du temps dexécution
  6. 6. Et comment fait-on pour connaitre ces 20% ?
  7. 7. Ne devinez pas,mesurez E = mc²S = (b*h)/2 a = b S = c²S = (h * (b+B))/2 a+b=cP = 2*Pi*r² a² + b² = c²La solution est 42
  8. 8. Et comment fait-on pour analyser ces 20% ?
  9. 9. Approfondissez leschoses Donne unpoisson à un homme, tule nourris pour un jour.Apprends-lui à pêcher,tu le chuck norris
  10. 10. Apprenez comment les chosesfonctionnent et pas seulementcomment les utiliser
  11. 11. Un exemple ? Le comportement dune JVM
  12. 12. JVM Tenure age StackArchitecture mémoireAllocator Full GC Tiltratio JVM générationel-Xmx Minor GC Tilt ratioMark -Xss JIT SweepCompaction -verbosegc
  13. 13. Évitez les Major GC(Full Garbage collector)
  14. 14. Fonctionnement simplifié du GC
  15. 15. Fonctionnement simplifié du GC
  16. 16. Fonctionnement simplifié du GC
  17. 17. Fonctionnement simplifié du GC
  18. 18. Fonctionnement simplifié du GC
  19. 19. Fonctionnement simplifié du GC
  20. 20. Fonctionnement simplifié du GC
  21. 21. Fonctionnement simplifié du GC
  22. 22. Fonctionnement simplifié du GC
  23. 23. Fonctionnement simplifié du GC
  24. 24. Fonctionnement simplifié du GC
  25. 25. Fonctionnement simplifié du GC
  26. 26. Fonctionnement simplifié du GC
  27. 27. Fonctionnement simplifié du GC
  28. 28. Fonctionnement simplifié du GC
  29. 29. Évitez les FullGCFaire attention aux objets vivants longtemps(pool, session...)Faire attention aux gros objetsEssayer de maximiser le nombre d’objetscollectés dans la New GenerationÉviter les objets de durée de vieintermédiaire
  30. 30. Un autre exemple ?
  31. 31. Larchitecture mémoire de la JVM ...
  32. 32. ... ou pas
  33. 33. Code Scala HTMLBytecode JavascriptFramework XML CSSGroovy Binaire JavaClass Java EE SQLJython
  34. 34. Code HTML Combinedfiles Gzip Cache-Control header CSSsprites DOM JavascriptFramework XML CSSChargement tardif CDN
  35. 35. Code SonarJ CouplageXradar Findbugs Revuede code Sonar PMDCheckstyle JIRA SquidClover NCSS CoberturaCouverture de code
  36. 36. FindBugs
  37. 37. FindBugs
  38. 38. FindBugs
  39. 39. Code VisualGC TPTPContiPerf jinfo DBunitHyperic jstat VisualVMJConsole NetbeansProfiler Perf4j jps TDAAudit de code Profiler
  40. 40. 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); }}
  41. 41. Code SQL Index OracleMySQL SGA BeneratorNormalisation MappingJMeter Tuning Full scanTransaction Select
  42. 42. select * from t_conducteurleft join t_voiture on id_conducteur=conducteur_fkwhere couleur = rouge x 200
  43. 43. Databene Benerator
  44. 44. 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>
  45. 45. Code Test aux limitesVisualGC LoadRunnerJConsole JMeter Testde charge MonitoringPlan de test Ramp up
  46. 46. Apache JMeter
  47. 47. ParamètresTransactionsRequêtes HTTP
  48. 48. Mesurez Mesurez Mesurez MesurezMesurez Mesurez Mesurez MesurezMesurez Mesurez Mesurez MesurezEt si possible avec un jeu dedonnées cohérent et une bonneméthodologie
  49. 49. 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/

×