Performances               Claude Falguière                    MontpellierJUG                 @cfalguiere                 ...
CLAUDE FALGUIERE                            Architecte technique                            http://cfalguiere.wordpress.co...
Bob      Alice                         user experiencedimanche 20 janvier 13
dimanche 20 janvier 13
impression                         cohérence                         stabilitédimanche 20 janvier 13
ou capacité                         vitesse         Charles                                   ou encombrementdimanche 20 j...
et disponibilitédimanche 20 janvier 13
et efficacitédimanche 20 janvier 13
Amazon :        Google :                                +100 ms         +500 ms          Optimisations         -1% sales  ...
Deandimanche 20 janvier 13
1     We use the most performing                                       frameworks !                             2       Le...
MEP                         l’heure de véritédimanche 20 janvier 13
dimanche 20 janvier 13
Capacité                         Concurrence - Locks                         Lenteur d’un composantdimanche 20 janvier 13
S3                    Nexus 10            MacBookPro             Bureautique   Quad-core 1.4GHz      Dual-core 1,7 GHz   Q...
2 Mbps         8 Mbps        16 Mbps                                     Musique 5 Mo :         20 s            5 s       ...
Essentiellement du scale out        D’autres problèmes liés à la mutualisation        Coût de la montée en chargedimanche ...
Agréger des capacités à faible coût                         Mais la limite restedimanche 20 janvier 13
Les fuites                         ressources limitées + non restituées = Famine                         Mémoire          ...
Les locks      Transactions (base de données)      Synchronized (objets Java)      Lock      Deadlock ou livelockdimanche ...
Les lenteurs                                 Les timeout                                                  Le volume       ...
Test en charge           iso-prod                         Test de vieillissement                         Test à petite cha...
tests en charge                          test de concurrence                          test de vieillissement              ...
L’analyse statique de code                         Les tests à 1 utilisateursdimanche 20 janvier 13
L’analyse statique de code      Sonar avec PMD et Findbugsdimanche 20 janvier 13
L’analyse d’une requête                         Temps de réponse serveurdimanche 20 janvier 13
L’analyse du temps d’affichage      YSlow, PageSpeed Insights, GDT      les proxy HTTP Charles, Fiddlerdimanche 20 janvier 13
L’analyse du temps serveur                                     {                                         HTTP             ...
L’analyse du temps serveur                         Access logs                              Perf4J, JMX, MBeans, BTrace, l...
L’analyse du temps serveurdimanche 20 janvier 13
L’analyse de la base de données                 Rapports sur les requêtes les plus longues                 Explain        ...
Le profilage du code Javadimanche 20 janvier 13
Le profilage du code Java        Identifier          Les opérations coûteuses ou répétées dans un use case          Les opér...
Points d’attention        Les algorithmes naïfs sur des grands volumes        Les types de collections (List, Set) et l’im...
Les algorithmesdimanche 20 janvier 13
Algorithmes et répétition            Les caches            Le précalcul partiel (arbres de fenwick,            raccourciss...
Fragmentations            Latence réseau, MTU            Buffers I/O            Facteurs de blocage                   SGBD...
Tests simultanés à 2 utilisateursdimanche 20 janvier 13
Indices de locks                          Très faible consommation de ressources                          Temps très longs...
L’analyse des locks            Au runtime              JConsole,Visualvm              Thread Dump + outil danalyse (jvisua...
Points d’attention et pistes        Locker si nécessaire               Identifier les durée de vie des objets et leur scope...
Test de capacité en charge                         Test de vieillissementdimanche 20 janvier 13
Load     Generatordimanche 20 janvier 13
http://jmeter.apache.org/         Projet Apache Jakarta         Scripts en XML (par IHM)         + script lets (javascript...
dimanche 20 janvier 13
Risqué                                    Vital       Que font les       utilisateurs                     Frequent        ...
Enregistrer                                       Thread Group                                          Logic Controller  ...
Thread Groupsdimanche 20 janvier 13
L’ordre de précédence    Logic Controller                                  Configuration configuration          TransactionC...
Exemple                                       User Variable           Configuration                                       C...
Gestion des mécanismes du navigateur                                lldimanche 20 janvier 13
Obtenir le résultatdimanche 20 janvier 13
Debugguer                Insérer des échantillons de debogage dans les controllers                (Debug Sampler)         ...
Paramétrer               Données de datasource CSV               Extractor dans les PostProcessor               UserVariab...
Vérifier les réponses                Assertions                   sur le contenu                    sur le nombre d’octets ...
Régler l’allure                ThreadGroup                 Nombre d’utilisateurs                 Durée de la montée en cha...
En charge                --no-gui                attention à la mémoire (conf de base -Xmx 1024m)dimanche 20 janvier 13
Biais qui dégradent le résultat           Biais qui améliorent           le résultatdimanche 20 janvier 13
volumes                         scenario, données, mots clés                                     caches                   ...
qui fonctionne le mieux ?                         A                               Bdimanche 20 janvier 13
Time Serie      and distributiondimanche 20 janvier 13
Quelques mauvais temps                         Temps instables                                      Bimodal !? ...dimanche...
identifier le coupabledimanche 20 janvier 13
DEV                         OPSdimanche 20 janvier 13
identifier le coupable                               Fred                                                 Greg             ...
Les goulets possiblesdimanche 20 janvier 13
Limites physiques                              Mémoire / Disque                                ressource non partageable  ...
Surveiller les ressources                CPU                  taux, longueur de la file d’attente, process runnable        ...
Limites logicielles                              ulimit, quotas, shaping réseau                              Les licences ...
Surveiller les ressources                Apache                   module apache-status                JEE via JMX         ...
Outils utiles                  Collecteur : Nagios / Zabbix                  Grapheur : Cacti / Graphite                  ...
Les Application Performance Management JEE                   JavaMelody (open source)                   Introscope        ...
Le dimensionnement                         adapter le comportement aux capacitésdimanche 20 janvier 13
Les poolsdimanche 20 janvier 13
Les pools      File d’attente                                     Tout ce qui rentre doit ressortir                       ...
L’entonnoirdimanche 20 janvier 13
Mémoire de la JVM                              Heap   -Xmxdimanche 20 janvier 13
Mémoire de la JVM                                     disponible sur la machine      swap                                 ...
L’analyse de la mémoire                  JVMTI & JMVPI via JMX                  Log -verbose:gc + outils type GCViewer    ...
Visualvm                         (plugin visualgc)dimanche 20 janvier 13
GCViewer                         Log -verbose:gcdimanche 20 janvier 13
Profilage mémoire                    Objets présents en grande quantité et en croissance                    Difficiles de di...
Tester, Tester, Tester                         Mesurer, Mesurer, Mesurer                         Comprendre               ...
Quelques lectures        Kirk Pepperdine        Blog Java Performance Tuning        Devoxx 2012 Performance Optimization T...
Claude Falguière                         @cfalguiere        Merci                         goo.gl/4mmJQdimanche 20 janvier 13
Prochain SlideShare
Chargement dans…5
×

Présentation Performances Montpellier

1 304 vues

Publié le

Présentation Performances Montpellier JUG Janvier 2013

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

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

Aucune remarque pour cette diapositive

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

×