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

4,427 views

Published on

Présentation réalisé pour la Breizhcamp 2012

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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/

×