Présentation Performances Montpellier
Upcoming SlideShare
Loading in...5
×
 

Présentation Performances Montpellier

on

  • 675 views

Présentation Performances Montpellier JUG Janvier 2013

Présentation Performances Montpellier JUG Janvier 2013

Statistics

Views

Total Views
675
Views on SlideShare
674
Embed Views
1

Actions

Likes
1
Downloads
13
Comments
0

1 Embed 1

https://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Présentation Performances Montpellier Présentation Performances Montpellier Presentation Transcript

  • Performances Claude Falguière MontpellierJUG @cfalguiere 16 Janvier 2013 http://fr.slideshare.net/claude.falguiere/ prsentation-performances-montpellier goo.gl/4mmJQdimanche 20 janvier 13
  • 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
  • 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 janvier 13
  • et disponibilitédimanche 20 janvier 13
  • et efficacitédimanche 20 janvier 13
  • Amazon : Google : +100 ms +500 ms Optimisations -1% sales –20% pages seen coût gainsdimanche 20 janvier 13
  • Deandimanche 20 janvier 13
  • 1 We use the most performing frameworks ! 2 Let’s upgrade the CPU Dean 3 Let’s go to the Clouddimanche 20 janvier 13
  • 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 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
  • 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
  • Essentiellement du scale out D’autres problèmes liés à la mutualisation Coût de la montée en chargedimanche 20 janvier 13
  • 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 Connexion non rendue au pool Lock en interblocagedimanche 20 janvier 13
  • Les locks Transactions (base de données) Synchronized (objets Java) Lock Deadlock ou livelockdimanche 20 janvier 13
  • Les lenteurs Les timeout Le volume L’algorithme La répétition Le fractionnementdimanche 20 janvier 13
  • Test en charge iso-prod Test de vieillissement Test à petite charge Analyse de code Test à 1 utilisateurdimanche 20 janvier 13
  • tests en charge test de concurrence test de vieillissement analyse de code mesure unitairedimanche 20 janvier 13
  • 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 Temps par Phases JSF couche Domaine Persistance (JDBC)dimanche 20 janvier 13
  • 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
  • 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 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
  • 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érations inutiles Les volumes pour chaque objet Visualvm ou autre profiler Scénario réaliste Volumes réalistesdimanche 20 janvier 13
  • 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
  • Les algorithmesdimanche 20 janvier 13
  • 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
  • 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
  • Tests simultanés à 2 utilisateursdimanche 20 janvier 13
  • 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
  • L’analyse des locks Au runtime JConsole,Visualvm Thread Dump + outil danalyse (jvisualvm,TDA ...) thread dump visualvm + plugin Threadsdimanche 20 janvier 13
  • 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
  • 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, beanshell ... via JSR-223) Extensible Multiprotocole Gestion des cookies et émulation du cachedimanche 20 janvier 13
  • dimanche 20 janvier 13
  • Risqué Vital Que font les utilisateurs Frequent Frequent Frequent Frequentdimanche 20 janvier 13
  • Enregistrer Thread Group Logic Controller Sampler HTTP Request Sampler HTTP Request Non Test Element HTTP Proxydimanche 20 janvier 13
  • Thread Groupsdimanche 20 janvier 13
  • 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
  • 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
  • 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) 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
  • 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
  • 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
  • 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
  • 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 durée du test et vélocité ignorer les erreurs ignorer les cas particuliers Simplifier Rangerdimanche 20 janvier 13
  • qui fonctionne le mieux ? A Bdimanche 20 janvier 13
  • Time Serie and distributiondimanche 20 janvier 13
  • Quelques mauvais temps Temps instables Bimodal !? ...dimanche 20 janvier 13
  • identifier le coupabledimanche 20 janvier 13
  • DEV OPSdimanche 20 janvier 13
  • identifier le coupable Fred Greg Erniedimanche 20 janvier 13
  • Les goulets possiblesdimanche 20 janvier 13
  • 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
  • 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
  • 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
  • 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
  • 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
  • Les Application Performance Management JEE JavaMelody (open source) Introscope PerformaSure DynaTrace NewRelic JXInsight/OpenCore AppDynamicsdimanche 20 janvier 13
  • 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 … 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
  • 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 utilisé par le process Core Stack Heap -Xmxdimanche 20 janvier 13
  • 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
  • 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 distinguer les fuites des caches tips : les fuites ont un nombre de générations élevédimanche 20 janvier 13
  • Tester, Tester, Tester Mesurer, Mesurer, Mesurer Comprendre Il n’y a pas de potion magiquedimanche 20 janvier 13
  • 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
  • Claude Falguière @cfalguiere Merci goo.gl/4mmJQdimanche 20 janvier 13