SlideShare ist ein Scribd-Unternehmen logo
1 von 85
Downloaden Sie, um offline zu lesen
Performances

               Claude Falguière                    MontpellierJUG
                 @cfalguiere                       16 Janvier 2013

                           http://fr.slideshare.net/claude.falguiere/
                           prsentation-performances-montpellier

                         goo.gl/4mmJQ
dimanche 20 janvier 13
CLAUDE FALGUIERE
                            Architecte technique

                            http://cfalguiere.wordpress.com

                            JUG Leader Duchess France
                            Leader Devoxx4Kids France
                            Membre du Paris JUG

                            @cfalguiere
                            +Claude Falguiere




dimanche 20 janvier 13
Bob      Alice


                         user experience



dimanche 20 janvier 13
dimanche 20 janvier 13
impression
                         cohérence
                         stabilité

dimanche 20 janvier 13
ou capacité




                         vitesse
         Charles




                                   ou encombrement

dimanche 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

                                            gains


dimanche 20 janvier 13
Dean



dimanche 20 janvier 13
1     We use the most performing
                                       frameworks !

                             2       Let’s upgrade the CPU
    Dean
                         3       Let’s go to the Cloud


dimanche 20 janvier 13
MEP




                         l’heure de vérité

dimanche 20 janvier 13
dimanche 20 janvier 13
Capacité



                         Concurrence - Locks



                         Lenteur d’un composant


dimanche 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 Mo


dimanche 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 mouvement

dimanche 20 janvier 13
Essentiellement du scale out
        D’autres problèmes liés à la mutualisation
        Coût de la montée en charge

dimanche 20 janvier 13
Agréger des capacités à faible coût
                         Mais la limite reste
dimanche 20 janvier 13
Les fuites

                         ressources limitées + non restituées = Famine




                         Mémoire
                         Connexion non rendue au pool
                         Lock en interblocage

dimanche 20 janvier 13
Les locks



      Transactions (base de données)
      Synchronized (objets Java)

      Lock
      Deadlock ou livelock




dimanche 20 janvier 13
Les lenteurs




                                 Les timeout
                                                  Le volume
                         L’algorithme
                                                   La répétition
                             Le fractionnement




dimanche 20 janvier 13
Test en charge           iso-prod
                         Test de vieillissement



                         Test à petite charge

                         Analyse de code

                         Test à 1 utilisateur



dimanche 20 janvier 13
tests en charge
                          test de concurrence
                          test de vieillissement




                         analyse de code
                         mesure unitaire


dimanche 20 janvier 13
L’analyse statique de code
                         Les tests à 1 utilisateurs



dimanche 20 janvier 13
L’analyse statique de code

      Sonar avec PMD et Findbugs




dimanche 20 janvier 13
L’analyse d’une requête




                         Temps de réponse serveur




dimanche 20 janvier 13
L’analyse du temps d’affichage

      YSlow, PageSpeed Insights, GDT
      les proxy HTTP Charles, Fiddler




dimanche 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 disques


dimanche 20 janvier 13
L’analyse du temps serveur




dimanche 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 DBA




dimanche 20 janvier 13
Le profilage du code Java




dimanche 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éalistes




dimanche 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’ArrayList




dimanche 20 janvier 13
Les algorithmes




dimanche 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, compactage




dimanche 20 janvier 13
Tests simultanés à 2 utilisateurs



dimanche 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 switching




dimanche 20 janvier 13
L’analyse des locks

            Au runtime
              JConsole,Visualvm
              Thread Dump + outil d'analyse (jvisualvm,TDA ...)

                                 thread dump

                                                    visualvm
                                                    + plugin Threads




dimanche 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 data


dimanche 20 janvier 13
Test de capacité en charge
                         Test de vieillissement



dimanche 20 janvier 13
Load
     Generator




dimanche 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 cache



dimanche 20 janvier 13
dimanche 20 janvier 13
Risqué
                                    Vital
       Que font les
       utilisateurs                     Frequent
                                      Frequent
                                    Frequent
                                  Frequent

dimanche 20 janvier 13
Enregistrer

                                       Thread Group
                                          Logic Controller
                                                Sampler
                                                  HTTP Request
                                                Sampler
                                                   HTTP Request


                                       Non Test Element
                                          HTTP Proxy

dimanche 20 janvier 13
Thread Groups




dimanche 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 reporting


dimanche 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 Tree

dimanche 20 janvier 13
Gestion des mécanismes du navigateur




                                ll




dimanche 20 janvier 13
Obtenir le résultat




dimanche 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 à logguer


dimanche 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 HTTP




dimanche 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és




dimanche 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ésultat




dimanche 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
                                   Ranger




dimanche 20 janvier 13
qui fonctionne le mieux ?

                         A                               B




dimanche 20 janvier 13
Time Serie




      and distribution




dimanche 20 janvier 13
Quelques mauvais temps




                         Temps instables




                                      Bimodal !? ...




dimanche 20 janvier 13
identifier le coupable




dimanche 20 janvier 13
DEV



                         OPS


dimanche 20 janvier 13
identifier le coupable

                               Fred


                                                 Greg
                 Ernie




dimanche 20 janvier 13
Les goulets possibles




dimanche 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 écroulement


dimanche 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 service

dimanche 20 janvier 13
Limites logicielles


                              ulimit, quotas, shaping réseau

                              Les licences


                              Configuration mémoire de la JVM

                              Tailles limites de pool et de caches




dimanche 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ûteuses
dimanche 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),Visualvm




dimanche 20 janvier 13
Les Application Performance Management JEE



                   JavaMelody (open source)
                   Introscope
                   PerformaSure
                   DynaTrace
                   NewRelic


                   JXInsight/OpenCore
                   AppDynamics



dimanche 20 janvier 13
Le dimensionnement

                         adapter le comportement aux capacités




dimanche 20 janvier 13
Les pools




dimanche 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ébit




dimanche 20 janvier 13
L’entonnoir




dimanche 20 janvier 13
Mémoire de la JVM




                              Heap   -Xmx

dimanche 20 janvier 13
Mémoire de la JVM


                                     disponible sur la machine      swap


                                   utilisé par le process



                         Core                               Stack




                                       Heap        -Xmx

dimanche 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ée



dimanche 20 janvier 13
Visualvm




                         (plugin visualgc)



dimanche 20 janvier 13
GCViewer

                         Log -verbose:gc




dimanche 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 magique


dimanche 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/4mmJQ

dimanche 20 janvier 13

Weitere ähnliche Inhalte

Andere mochten auch

LPIC1 10 01 logs
LPIC1 10 01 logsLPIC1 10 01 logs
LPIC1 10 01 logsNoël
 
Java - JDBC - 2 - Intructions SQL
Java - JDBC - 2 - Intructions SQLJava - JDBC - 2 - Intructions SQL
Java - JDBC - 2 - Intructions SQLNoël
 
LPIC1 08 03 grub2
LPIC1 08 03 grub2LPIC1 08 03 grub2
LPIC1 08 03 grub2Noël
 
LPIC1 08 01 démarrage
LPIC1 08 01 démarrageLPIC1 08 01 démarrage
LPIC1 08 01 démarrageNoël
 
Accès aux bases de données via jdbc
Accès aux bases de données via jdbcAccès aux bases de données via jdbc
Accès aux bases de données via jdbcRachid Lajouad
 
LPIC1 11 01 sécurité réseaux
LPIC1 11 01 sécurité réseauxLPIC1 11 01 sécurité réseaux
LPIC1 11 01 sécurité réseauxNoël
 
Application Java swing : Gestion des réunion
Application Java swing : Gestion des réunionApplication Java swing : Gestion des réunion
Application Java swing : Gestion des réunionOussama Bessrour
 
LPIC2 12 01 pare-feu et nating
LPIC2 12 01 pare-feu et natingLPIC2 12 01 pare-feu et nating
LPIC2 12 01 pare-feu et natingNoël
 
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...Mehdi Hamime
 
Présentation pfe Big Data Hachem SELMI et Ahmed DRIDI
Présentation pfe Big Data Hachem SELMI et Ahmed DRIDIPrésentation pfe Big Data Hachem SELMI et Ahmed DRIDI
Présentation pfe Big Data Hachem SELMI et Ahmed DRIDIHaShem Selmi
 
Connexion jdbc
Connexion jdbcConnexion jdbc
Connexion jdbcInes Ouaz
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EEInes Ouaz
 

Andere mochten auch (17)

LPIC1 10 01 logs
LPIC1 10 01 logsLPIC1 10 01 logs
LPIC1 10 01 logs
 
Java - JDBC - 2 - Intructions SQL
Java - JDBC - 2 - Intructions SQLJava - JDBC - 2 - Intructions SQL
Java - JDBC - 2 - Intructions SQL
 
Programmation en-java-api
Programmation en-java-apiProgrammation en-java-api
Programmation en-java-api
 
LPIC1 08 03 grub2
LPIC1 08 03 grub2LPIC1 08 03 grub2
LPIC1 08 03 grub2
 
LPIC1 08 01 démarrage
LPIC1 08 01 démarrageLPIC1 08 01 démarrage
LPIC1 08 01 démarrage
 
Accès aux bases de données via jdbc
Accès aux bases de données via jdbcAccès aux bases de données via jdbc
Accès aux bases de données via jdbc
 
J2ee
J2eeJ2ee
J2ee
 
LPIC1 11 01 sécurité réseaux
LPIC1 11 01 sécurité réseauxLPIC1 11 01 sécurité réseaux
LPIC1 11 01 sécurité réseaux
 
Application Java swing : Gestion des réunion
Application Java swing : Gestion des réunionApplication Java swing : Gestion des réunion
Application Java swing : Gestion des réunion
 
JPA est middleware
JPA est middleware JPA est middleware
JPA est middleware
 
LPIC2 12 01 pare-feu et nating
LPIC2 12 01 pare-feu et natingLPIC2 12 01 pare-feu et nating
LPIC2 12 01 pare-feu et nating
 
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...
 
Présentation pfe Big Data Hachem SELMI et Ahmed DRIDI
Présentation pfe Big Data Hachem SELMI et Ahmed DRIDIPrésentation pfe Big Data Hachem SELMI et Ahmed DRIDI
Présentation pfe Big Data Hachem SELMI et Ahmed DRIDI
 
Connexion jdbc
Connexion jdbcConnexion jdbc
Connexion jdbc
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EE
 
PROJET JAVA BD MySQL
PROJET JAVA BD MySQLPROJET JAVA BD MySQL
PROJET JAVA BD MySQL
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 

Mehr von Claude Falguiere

H2O , Le machine learning sans coder ou presque - Devoxx france 2016
H2O , Le machine learning sans coder ou presque - Devoxx france 2016H2O , Le machine learning sans coder ou presque - Devoxx france 2016
H2O , Le machine learning sans coder ou presque - Devoxx france 2016Claude Falguiere
 
Pres perf human talks mars 2015
Pres perf human talks mars 2015Pres perf human talks mars 2015
Pres perf human talks mars 2015Claude Falguiere
 
Presentation devoxx4kids à iut-agile
Presentation devoxx4kids à iut-agilePresentation devoxx4kids à iut-agile
Presentation devoxx4kids à iut-agileClaude Falguiere
 
Le monitoring à l'heure de DevOps et Big Data
Le monitoring à l'heure de DevOps et Big DataLe monitoring à l'heure de DevOps et Big Data
Le monitoring à l'heure de DevOps et Big DataClaude Falguiere
 
Présentation du user group Duchess France au GDG de Nantes
Présentation du user group Duchess France au GDG de NantesPrésentation du user group Duchess France au GDG de Nantes
Présentation du user group Duchess France au GDG de NantesClaude Falguiere
 
Présentation de Page Speed au GDG de Nantes
Présentation de Page Speed au GDG de NantesPrésentation de Page Speed au GDG de Nantes
Présentation de Page Speed au GDG de NantesClaude Falguiere
 
Pres android nuit de l'info v3
Pres android nuit de l'info v3Pres android nuit de l'info v3
Pres android nuit de l'info v3Claude Falguiere
 
Performance test - YaJUG Octobre 2012
Performance test - YaJUG Octobre 2012Performance test - YaJUG Octobre 2012
Performance test - YaJUG Octobre 2012Claude Falguiere
 
La marmite Intro session NoSQL
La marmite Intro session NoSQLLa marmite Intro session NoSQL
La marmite Intro session NoSQLClaude Falguiere
 
Analyse de données avec Incanter
Analyse de données avec IncanterAnalyse de données avec Incanter
Analyse de données avec IncanterClaude Falguiere
 
Analyse de données avec Incanter
Analyse de données avec IncanterAnalyse de données avec Incanter
Analyse de données avec IncanterClaude Falguiere
 
Quickie Incanter/Clojure à Devoxx France 2012
Quickie Incanter/Clojure à Devoxx France 2012Quickie Incanter/Clojure à Devoxx France 2012
Quickie Incanter/Clojure à Devoxx France 2012Claude Falguiere
 
Deploiement continu breizh camp
Deploiement continu breizh campDeploiement continu breizh camp
Deploiement continu breizh campClaude Falguiere
 
Deploiement continu AgileFfrance 2011
Deploiement continu AgileFfrance 2011Deploiement continu AgileFfrance 2011
Deploiement continu AgileFfrance 2011Claude Falguiere
 

Mehr von Claude Falguiere (20)

H2O , Le machine learning sans coder ou presque - Devoxx france 2016
H2O , Le machine learning sans coder ou presque - Devoxx france 2016H2O , Le machine learning sans coder ou presque - Devoxx france 2016
H2O , Le machine learning sans coder ou presque - Devoxx france 2016
 
Pres perf human talks mars 2015
Pres perf human talks mars 2015Pres perf human talks mars 2015
Pres perf human talks mars 2015
 
Devoxx 2014 monitoring
Devoxx 2014 monitoringDevoxx 2014 monitoring
Devoxx 2014 monitoring
 
Devoxx 2014 Monitoring
Devoxx 2014 Monitoring Devoxx 2014 Monitoring
Devoxx 2014 Monitoring
 
Presentation devoxx4kids à iut-agile
Presentation devoxx4kids à iut-agilePresentation devoxx4kids à iut-agile
Presentation devoxx4kids à iut-agile
 
Le monitoring à l'heure de DevOps et Big Data
Le monitoring à l'heure de DevOps et Big DataLe monitoring à l'heure de DevOps et Big Data
Le monitoring à l'heure de DevOps et Big Data
 
Présentation du user group Duchess France au GDG de Nantes
Présentation du user group Duchess France au GDG de NantesPrésentation du user group Duchess France au GDG de Nantes
Présentation du user group Duchess France au GDG de Nantes
 
Présentation de Page Speed au GDG de Nantes
Présentation de Page Speed au GDG de NantesPrésentation de Page Speed au GDG de Nantes
Présentation de Page Speed au GDG de Nantes
 
Pres android nuit de l'info v3
Pres android nuit de l'info v3Pres android nuit de l'info v3
Pres android nuit de l'info v3
 
Performance test - YaJUG Octobre 2012
Performance test - YaJUG Octobre 2012Performance test - YaJUG Octobre 2012
Performance test - YaJUG Octobre 2012
 
La marmite Intro session NoSQL
La marmite Intro session NoSQLLa marmite Intro session NoSQL
La marmite Intro session NoSQL
 
Analyse de données avec Incanter
Analyse de données avec IncanterAnalyse de données avec Incanter
Analyse de données avec Incanter
 
Analyse de données avec Incanter
Analyse de données avec IncanterAnalyse de données avec Incanter
Analyse de données avec Incanter
 
Incanter bigdata jsc2012
Incanter bigdata jsc2012Incanter bigdata jsc2012
Incanter bigdata jsc2012
 
Quickie Incanter/Clojure à Devoxx France 2012
Quickie Incanter/Clojure à Devoxx France 2012Quickie Incanter/Clojure à Devoxx France 2012
Quickie Incanter/Clojure à Devoxx France 2012
 
Diagnostic performances
Diagnostic performancesDiagnostic performances
Diagnostic performances
 
Diagnostic performances
Diagnostic performancesDiagnostic performances
Diagnostic performances
 
Usine logicielle ios
Usine logicielle iosUsine logicielle ios
Usine logicielle ios
 
Deploiement continu breizh camp
Deploiement continu breizh campDeploiement continu breizh camp
Deploiement continu breizh camp
 
Deploiement continu AgileFfrance 2011
Deploiement continu AgileFfrance 2011Deploiement continu AgileFfrance 2011
Deploiement continu AgileFfrance 2011
 

Présentation Performances Montpellier

  • 1. Performances Claude Falguière MontpellierJUG @cfalguiere 16 Janvier 2013 http://fr.slideshare.net/claude.falguiere/ prsentation-performances-montpellier goo.gl/4mmJQ dimanche 20 janvier 13
  • 2. CLAUDE FALGUIERE Architecte technique http://cfalguiere.wordpress.com JUG Leader Duchess France Leader Devoxx4Kids France Membre du Paris JUG @cfalguiere +Claude Falguiere dimanche 20 janvier 13
  • 3. Bob Alice user experience dimanche 20 janvier 13
  • 5. impression cohérence stabilité dimanche 20 janvier 13
  • 6. ou capacité vitesse Charles ou encombrement dimanche 20 janvier 13
  • 9. Amazon : Google : +100 ms +500 ms Optimisations -1% sales –20% pages seen coût gains dimanche 20 janvier 13
  • 11. 1 We use the most performing frameworks ! 2 Let’s upgrade the CPU Dean 3 Let’s go to the Cloud dimanche 20 janvier 13
  • 12. MEP l’heure de vérité dimanche 20 janvier 13
  • 14. Capacité Concurrence - Locks Lenteur d’un composant dimanche 20 janvier 13
  • 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 Mo dimanche 20 janvier 13
  • 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 mouvement dimanche 20 janvier 13
  • 17. Essentiellement du scale out D’autres problèmes liés à la mutualisation Coût de la montée en charge dimanche 20 janvier 13
  • 18. Agréger des capacités à faible coût Mais la limite reste dimanche 20 janvier 13
  • 19. Les fuites ressources limitées + non restituées = Famine Mémoire Connexion non rendue au pool Lock en interblocage dimanche 20 janvier 13
  • 20. Les locks Transactions (base de données) Synchronized (objets Java) Lock Deadlock ou livelock dimanche 20 janvier 13
  • 21. Les lenteurs Les timeout Le volume L’algorithme La répétition Le fractionnement dimanche 20 janvier 13
  • 22. Test en charge iso-prod Test de vieillissement Test à petite charge Analyse de code Test à 1 utilisateur dimanche 20 janvier 13
  • 23. tests en charge test de concurrence test de vieillissement analyse de code mesure unitaire dimanche 20 janvier 13
  • 24. L’analyse statique de code Les tests à 1 utilisateurs dimanche 20 janvier 13
  • 25. L’analyse statique de code Sonar avec PMD et Findbugs dimanche 20 janvier 13
  • 26. L’analyse d’une requête Temps de réponse serveur dimanche 20 janvier 13
  • 27. L’analyse du temps d’affichage YSlow, PageSpeed Insights, GDT les proxy HTTP Charles, Fiddler dimanche 20 janvier 13
  • 28. L’analyse du temps serveur { HTTP Temps par Phases JSF couche Domaine Persistance (JDBC) dimanche 20 janvier 13
  • 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 disques dimanche 20 janvier 13
  • 30. L’analyse du temps serveur dimanche 20 janvier 13
  • 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 DBA dimanche 20 janvier 13
  • 32. Le profilage du code Java dimanche 20 janvier 13
  • 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éalistes dimanche 20 janvier 13
  • 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’ArrayList dimanche 20 janvier 13
  • 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. Fragmentations Latence réseau, MTU Buffers I/O Facteurs de blocage SGBD : fetch size File systems : page size Fragmentation d’espace, compactage dimanche 20 janvier 13
  • 38. Tests simultanés à 2 utilisateurs dimanche 20 janvier 13
  • 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 switching dimanche 20 janvier 13
  • 40. L’analyse des locks Au runtime JConsole,Visualvm Thread Dump + outil d'analyse (jvisualvm,TDA ...) thread dump visualvm + plugin Threads dimanche 20 janvier 13
  • 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 data dimanche 20 janvier 13
  • 42. Test de capacité en charge Test de vieillissement dimanche 20 janvier 13
  • 43. Load Generator dimanche 20 janvier 13
  • 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 cache dimanche 20 janvier 13
  • 46. Risqué Vital Que font les utilisateurs Frequent Frequent Frequent Frequent dimanche 20 janvier 13
  • 47. Enregistrer Thread Group Logic Controller Sampler HTTP Request Sampler HTTP Request Non Test Element HTTP Proxy dimanche 20 janvier 13
  • 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 reporting dimanche 20 janvier 13
  • 50. Exemple User Variable Configuration CSV Reader Logic Controller Pre-Processor Timer Sampler Post-Processor RegularExpression Extrator Assertion ResponseAssertion Logic Controller Listener View Result Tree dimanche 20 janvier 13
  • 51. Gestion des mécanismes du navigateur ll dimanche 20 janvier 13
  • 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 à logguer dimanche 20 janvier 13
  • 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. 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 HTTP dimanche 20 janvier 13
  • 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és dimanche 20 janvier 13
  • 57. En charge --no-gui attention à la mémoire (conf de base -Xmx 1024m) dimanche 20 janvier 13
  • 58. Biais qui dégradent le résultat Biais qui améliorent le résultat dimanche 20 janvier 13
  • 59. volumes scenario, données, mots clés caches durée du test et vélocité ignorer les erreurs ignorer les cas particuliers Simplifier Ranger dimanche 20 janvier 13
  • 60. qui fonctionne le mieux ? A B dimanche 20 janvier 13
  • 61. Time Serie and distribution dimanche 20 janvier 13
  • 62. Quelques mauvais temps Temps instables Bimodal !? ... dimanche 20 janvier 13
  • 64. DEV OPS dimanche 20 janvier 13
  • 65. identifier le coupable Fred Greg Ernie dimanche 20 janvier 13
  • 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 écroulement dimanche 20 janvier 13
  • 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 service dimanche 20 janvier 13
  • 69. Limites logicielles ulimit, quotas, shaping réseau Les licences Configuration mémoire de la JVM Tailles limites de pool et de caches dimanche 20 janvier 13
  • 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ûteuses dimanche 20 janvier 13
  • 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),Visualvm dimanche 20 janvier 13
  • 72. Les Application Performance Management JEE JavaMelody (open source) Introscope PerformaSure DynaTrace NewRelic JXInsight/OpenCore AppDynamics dimanche 20 janvier 13
  • 73. Le dimensionnement adapter le comportement aux capacités dimanche 20 janvier 13
  • 74. Les pools dimanche 20 janvier 13
  • 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ébit dimanche 20 janvier 13
  • 77. Mémoire de la JVM Heap -Xmx dimanche 20 janvier 13
  • 78. Mémoire de la JVM disponible sur la machine swap utilisé par le process Core Stack Heap -Xmx dimanche 20 janvier 13
  • 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ée dimanche 20 janvier 13
  • 80. Visualvm (plugin visualgc) dimanche 20 janvier 13
  • 81. GCViewer Log -verbose:gc dimanche 20 janvier 13
  • 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. Tester, Tester, Tester Mesurer, Mesurer, Mesurer Comprendre Il n’y a pas de potion magique dimanche 20 janvier 13
  • 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. Claude Falguière @cfalguiere Merci goo.gl/4mmJQ dimanche 20 janvier 13