Présentation Performances Montpellier

1,097 views
982 views

Published on

Présentation Performances Montpellier JUG Janvier 2013

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,097
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
33
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Présentation Performances Montpellier

  1. 1. Performances Claude Falguière MontpellierJUG @cfalguiere 16 Janvier 2013 http://fr.slideshare.net/claude.falguiere/ prsentation-performances-montpellier goo.gl/4mmJQdimanche 20 janvier 13
  2. 2. CLAUDE FALGUIERE Architecte technique http://cfalguiere.wordpress.com JUG Leader Duchess France Leader Devoxx4Kids France Membre du Paris JUG @cfalguiere +Claude Falguieredimanche 20 janvier 13
  3. 3. Bob Alice user experiencedimanche 20 janvier 13
  4. 4. dimanche 20 janvier 13
  5. 5. impression cohérence stabilitédimanche 20 janvier 13
  6. 6. ou capacité vitesse Charles ou encombrementdimanche 20 janvier 13
  7. 7. et disponibilitédimanche 20 janvier 13
  8. 8. et efficacitédimanche 20 janvier 13
  9. 9. Amazon : Google : +100 ms +500 ms Optimisations -1% sales –20% pages seen coût gainsdimanche 20 janvier 13
  10. 10. Deandimanche 20 janvier 13
  11. 11. 1 We use the most performing frameworks ! 2 Let’s upgrade the CPU Dean 3 Let’s go to the Clouddimanche 20 janvier 13
  12. 12. MEP l’heure de véritédimanche 20 janvier 13
  13. 13. dimanche 20 janvier 13
  14. 14. Capacité Concurrence - Locks Lenteur d’un composantdimanche 20 janvier 13
  15. 15. S3 Nexus 10 MacBookPro Bureautique Quad-core 1.4GHz Dual-core 1,7 GHz QuadCore i7 2,3 GHz Core i3 3GHz 1Go 2 Go 4 / 8 Go 2 / 4 Go iPhone5 iPad4 MacBookAir Dual-core 1.02GHz Dual-core 1.3GHz Dual-Core i5 1,7 GHz 1Go 1Go 4 Go HTC desire 1 GHz 576 Mo Servers iPhone4 Quad-Core Xeon 3,2 GHz 800 MHz 8 / 64 Go 512 Modimanche 20 janvier 13
  16. 16. 2 Mbps 8 Mbps 16 Mbps Musique 5 Mo : 20 s 5 s 2.5 s Vidéo 1.5 Go : 97 mn 24 mn 12 mn Réseau local filaire 1 Gbit/s 500 Mbit/s ADSL ADSL2+ 8 Mbit/s 16Mbits/s (20Mbits/s ATM) 4 Mbit/s à 4Km 5 Mbits à 10 Mbits WIFI 802.11.b WIFI 802.11.a / 802.11g WIFI 802.11n2 11 Mbit/s 54 Mbit/s 600 Mbit/s théoriques 6 Mbit/s réels 25 Mbit/s réels 3G 3G+ HSPA LTE 1,9 Mbit/s 14,4 Mbit/s 42 Mbit/s 326 Mbit/s 384 Kbit/s 7,2 Mbit/s (v6) 10 Mbit/s (v8) 40 Mbit/s 4G 1Gb à l’arrêt - 100Mb en mouvementdimanche 20 janvier 13
  17. 17. Essentiellement du scale out D’autres problèmes liés à la mutualisation Coût de la montée en chargedimanche 20 janvier 13
  18. 18. Agréger des capacités à faible coût Mais la limite restedimanche 20 janvier 13
  19. 19. Les fuites ressources limitées + non restituées = Famine Mémoire Connexion non rendue au pool Lock en interblocagedimanche 20 janvier 13
  20. 20. Les locks Transactions (base de données) Synchronized (objets Java) Lock Deadlock ou livelockdimanche 20 janvier 13
  21. 21. Les lenteurs Les timeout Le volume L’algorithme La répétition Le fractionnementdimanche 20 janvier 13
  22. 22. Test en charge iso-prod Test de vieillissement Test à petite charge Analyse de code Test à 1 utilisateurdimanche 20 janvier 13
  23. 23. tests en charge test de concurrence test de vieillissement analyse de code mesure unitairedimanche 20 janvier 13
  24. 24. L’analyse statique de code Les tests à 1 utilisateursdimanche 20 janvier 13
  25. 25. L’analyse statique de code Sonar avec PMD et Findbugsdimanche 20 janvier 13
  26. 26. L’analyse d’une requête Temps de réponse serveurdimanche 20 janvier 13
  27. 27. L’analyse du temps d’affichage YSlow, PageSpeed Insights, GDT les proxy HTTP Charles, Fiddlerdimanche 20 janvier 13
  28. 28. L’analyse du temps serveur { HTTP Temps par Phases JSF couche Domaine Persistance (JDBC)dimanche 20 janvier 13
  29. 29. L’analyse du temps serveur Access logs Perf4J, JMX, MBeans, BTrace, logs Drivers JDBC virtuels (P6Spy, Log4JDBC) Temps des requêtes Temps de service des disquesdimanche 20 janvier 13
  30. 30. L’analyse du temps serveurdimanche 20 janvier 13
  31. 31. L’analyse de la base de données Rapports sur les requêtes les plus longues Explain Index Eviter les tris (order by, unions) et les cascade Cache hit/miss Passer 3 semaines de vacances avec la doc Hibernate Déjeuner avec les DBAdimanche 20 janvier 13
  32. 32. Le profilage du code Javadimanche 20 janvier 13
  33. 33. Le profilage du code Java Identifier Les opérations coûteuses ou répétées dans un use case Les opérations inutiles Les volumes pour chaque objet Visualvm ou autre profiler Scénario réaliste Volumes réalistesdimanche 20 janvier 13
  34. 34. Points d’attention Les algorithmes naïfs sur des grands volumes Les types de collections (List, Set) et l’implémentation Evaluer l’utilité des tris Eviter l’agrandissements de structure LinkedList, redimensionnement d’ArrayListdimanche 20 janvier 13
  35. 35. Les algorithmesdimanche 20 janvier 13
  36. 36. Algorithmes et répétition Les caches Le précalcul partiel (arbres de fenwick, raccourcissement d’arbre) Les heuristiques L’estimation de probabilitédimanche 20 janvier 13
  37. 37. Fragmentations Latence réseau, MTU Buffers I/O Facteurs de blocage SGBD : fetch size File systems : page size Fragmentation d’espace, compactagedimanche 20 janvier 13
  38. 38. Tests simultanés à 2 utilisateursdimanche 20 janvier 13
  39. 39. Indices de locks Très faible consommation de ressources Temps très longs (time-outs) Affecte particulièrement certains use cases et à faible charge Beaucoup de context switchingdimanche 20 janvier 13
  40. 40. L’analyse des locks Au runtime JConsole,Visualvm Thread Dump + outil danalyse (jvisualvm,TDA ...) thread dump visualvm + plugin Threadsdimanche 20 janvier 13
  41. 41. Points d’attention et pistes Locker si nécessaire Identifier les durée de vie des objets et leur scope Utiliser les collections non synchronisées (List, Map) Réduire la durée des locks Alternatives Avoir une version par thread (Thread Local) Déplacer le problème (volatile) Immutabilité et persistent datadimanche 20 janvier 13
  42. 42. Test de capacité en charge Test de vieillissementdimanche 20 janvier 13
  43. 43. Load Generatordimanche 20 janvier 13
  44. 44. http://jmeter.apache.org/ Projet Apache Jakarta Scripts en XML (par IHM) + script lets (javascript, beanshell ... via JSR-223) Extensible Multiprotocole Gestion des cookies et émulation du cachedimanche 20 janvier 13
  45. 45. dimanche 20 janvier 13
  46. 46. Risqué Vital Que font les utilisateurs Frequent Frequent Frequent Frequentdimanche 20 janvier 13
  47. 47. Enregistrer Thread Group Logic Controller Sampler HTTP Request Sampler HTTP Request Non Test Element HTTP Proxydimanche 20 janvier 13
  48. 48. Thread Groupsdimanche 20 janvier 13
  49. 49. L’ordre de précédence Logic Controller Configuration configuration TransactionController Pre-Processor mise à jour de paramètre IfController WhileController Timers attente Sampler requête Post-Processor extraction de valeur Assertion vérification Listener visualisation et reportingdimanche 20 janvier 13
  50. 50. Exemple User Variable Configuration CSV Reader Logic Controller Pre-Processor Timer Sampler Post-Processor RegularExpression Extrator Assertion ResponseAssertion Logic Controller Listener View Result Treedimanche 20 janvier 13
  51. 51. Gestion des mécanismes du navigateur lldimanche 20 janvier 13
  52. 52. Obtenir le résultatdimanche 20 janvier 13
  53. 53. Debugguer Insérer des échantillons de debogage dans les controllers (Debug Sampler) Enregistrer chaque action dans son TransactionController Nommer les TransactionController Activer la console En charge Suivre le Thread Id Ajouter des variables à logguerdimanche 20 janvier 13
  54. 54. Paramétrer Données de datasource CSV Extractor dans les PostProcessor UserVariable ${nomVariable} UserVariable passée au test -J nomVar ou --addProp vars.properties ${__P(nomVar, valeurDefaut)}dimanche 20 janvier 13
  55. 55. Vérifier les réponses Assertions sur le contenu sur le nombre d’octets reçus sur les entêtes HTTP JMeter reporte automatiquement le code HTTPdimanche 20 janvier 13
  56. 56. Régler l’allure ThreadGroup Nombre d’utilisateurs Durée de la montée en charge Délai de reflexion de l’utilisateur (ThinkTime) Valider le nombre de samples réalisésdimanche 20 janvier 13
  57. 57. En charge --no-gui attention à la mémoire (conf de base -Xmx 1024m)dimanche 20 janvier 13
  58. 58. Biais qui dégradent le résultat Biais qui améliorent le résultatdimanche 20 janvier 13
  59. 59. volumes scenario, données, mots clés caches durée du test et vélocité ignorer les erreurs ignorer les cas particuliers Simplifier Rangerdimanche 20 janvier 13
  60. 60. qui fonctionne le mieux ? A Bdimanche 20 janvier 13
  61. 61. Time Serie and distributiondimanche 20 janvier 13
  62. 62. Quelques mauvais temps Temps instables Bimodal !? ...dimanche 20 janvier 13
  63. 63. identifier le coupabledimanche 20 janvier 13
  64. 64. DEV OPSdimanche 20 janvier 13
  65. 65. identifier le coupable Fred Greg Erniedimanche 20 janvier 13
  66. 66. Les goulets possiblesdimanche 20 janvier 13
  67. 67. Limites physiques Mémoire / Disque ressource non partageable → erreur quand plus de ressources CPU ressource en time sharing → partage excessif, lenteur Réseau ressource en time sharing → idem + retry et écroulementdimanche 20 janvier 13
  68. 68. Surveiller les ressources CPU taux, longueur de la file d’attente, process runnable Mémoire utilisation mémoire, swap-in Réseau nombre de connexions établies nombre d’octets échangés entre les process Disque longueur de la file d’attente, octets lus/écrits, temps de servicedimanche 20 janvier 13
  69. 69. Limites logicielles ulimit, quotas, shaping réseau Les licences Configuration mémoire de la JVM Tailles limites de pool et de cachesdimanche 20 janvier 13
  70. 70. Surveiller les ressources Apache module apache-status JEE via JMX nombre d’éléments de pool actifs nombre de connexions JDBC établies et actives nombre de messages dans les queues JMS MBeans Hibernate MBeans des caches Vos MBeans Base de données Nombre de requêtes, Locks, requêtes coûteusesdimanche 20 janvier 13
  71. 71. Outils utiles Collecteur : Nagios / Zabbix Grapheur : Cacti / Graphite JMX : JConsole, JMXTrans Unix/Linux : sar + ksar / mnon, vmstat, iostat, netstat Windows : perfmon, netstat JVM : jstat, kill -3 (thread dump),Visualvmdimanche 20 janvier 13
  72. 72. Les Application Performance Management JEE JavaMelody (open source) Introscope PerformaSure DynaTrace NewRelic JXInsight/OpenCore AppDynamicsdimanche 20 janvier 13
  73. 73. Le dimensionnement adapter le comportement aux capacitésdimanche 20 janvier 13
  74. 74. Les poolsdimanche 20 janvier 13
  75. 75. Les pools File d’attente Tout ce qui rentre doit ressortir … en moyenne Le pool est dimensionné par Pool rapport aux ressources Les files d’attente régulent les variations de débitdimanche 20 janvier 13
  76. 76. L’entonnoirdimanche 20 janvier 13
  77. 77. Mémoire de la JVM Heap -Xmxdimanche 20 janvier 13
  78. 78. Mémoire de la JVM disponible sur la machine swap utilisé par le process Core Stack Heap -Xmxdimanche 20 janvier 13
  79. 79. L’analyse de la mémoire JVMTI & JMVPI via JMX Log -verbose:gc + outils type GCViewer visualvm jstat avec les options gc jmap et jhat jClarity Censum (payant) GC overhead < 5% (temps overhead / uptime) Activité CPU élevéedimanche 20 janvier 13
  80. 80. Visualvm (plugin visualgc)dimanche 20 janvier 13
  81. 81. GCViewer Log -verbose:gcdimanche 20 janvier 13
  82. 82. Profilage mémoire Objets présents en grande quantité et en croissance Difficiles de distinguer les fuites des caches tips : les fuites ont un nombre de générations élevédimanche 20 janvier 13
  83. 83. Tester, Tester, Tester Mesurer, Mesurer, Mesurer Comprendre Il n’y a pas de potion magiquedimanche 20 janvier 13
  84. 84. Quelques lectures Kirk Pepperdine Blog Java Performance Tuning Devoxx 2012 Performance Optimization Tuning Aleksey Shipilev performance mindmap devoxx http://shipilev.net/pub/talks/devoxx-Nov2012-perfMethodology-mindmap.pdf JMeter http://blog.milamberspace.net/dimanche 20 janvier 13
  85. 85. Claude Falguière @cfalguiere Merci goo.gl/4mmJQdimanche 20 janvier 13

×