85
MontpellierJUG 16 Janvier 2013 goo.gl/4mmJQ Performances Claude Falguière @cfalguiere http://fr.slideshare.net/claude.falguiere/ prsentation-performances-montpellier dimanche 20 janvier 13

Présentation Performances Montpellier

Embed Size (px)

DESCRIPTION

Présentation Performances Montpellier JUG Janvier 2013

Citation preview

Page 3: Présentation Performances Montpellier

Bob Alice

user experience

dimanche 20 janvier 13

Page 4: Présentation Performances Montpellier

dimanche 20 janvier 13

Page 5: Présentation Performances Montpellier

impressioncohérencestabilité

dimanche 20 janvier 13

Page 6: Présentation Performances Montpellier

vitesse

ou encombrement

ou capacité

Charles

dimanche 20 janvier 13

Page 7: Présentation Performances Montpellier

et disponibilité

dimanche 20 janvier 13

Page 8: Présentation Performances Montpellier

et efficacité

dimanche 20 janvier 13

Page 9: Présentation Performances Montpellier

gains

Optimisations

coût

Amazon :+100 ms -1% sales

Google : +500 ms –20% pages seen

dimanche 20 janvier 13

Page 10: Présentation Performances Montpellier

Dean

dimanche 20 janvier 13

Page 11: Présentation Performances Montpellier

We use the most performing frameworks !

Let’s upgrade the CPU

Let’s go to the Cloud

1

2

3Dean

dimanche 20 janvier 13

Page 12: Présentation Performances Montpellier

l’heure de vérité

MEP

dimanche 20 janvier 13

Page 13: Présentation Performances Montpellier

dimanche 20 janvier 13

Page 14: Présentation Performances Montpellier

Capacité

Concurrence - Locks

Lenteur d’un composant

dimanche 20 janvier 13

Page 15: Présentation Performances Montpellier

S3Quad-core 1.4GHz1Go

Nexus 10Dual-core 1,7 GHz2 Go

ServersQuad-Core Xeon 3,2 GHz8 / 64 Go

iPad4Dual-core 1.3GHz1Go

iPhone5Dual-core 1.02GHz1Go

iPhone4800 MHz512 Mo

MacBookAir Dual-Core i5 1,7 GHz4 Go

MacBookProQuadCore i7 2,3 GHz4 / 8 Go

HTC desire1 GHz576 Mo

BureautiqueCore i3 3GHz2 / 4 Go

dimanche 20 janvier 13

Page 16: Présentation Performances Montpellier

WIFI 802.11n2 600 Mbit/s théoriques

4G 1Gb à l’arrêt - 100Mb en mouvement

ADSL 8 Mbit/s4 Mbit/s à 4Km

Réseau local filaire 1 Gbit/s 500 Mbit/s

ADSL2+ 16Mbits/s (20Mbits/s ATM)5 Mbits à 10 Mbits

WIFI 802.11.b 11 Mbit/s 6 Mbit/s réels

WIFI 802.11.a / 802.11g 54 Mbit/s 25 Mbit/s réels

3G 1,9 Mbit/s 384 Kbit/s

3G+ 14,4 Mbit/s 7,2 Mbit/s (v6)

HSPA 42 Mbit/s 10 Mbit/s (v8)

LTE 326 Mbit/s 40 Mbit/s

2 Mbps 8 Mbps 16 MbpsMusique 5 Mo : 20 s 5 s 2.5 sVidéo 1.5 Go : 97 mn 24 mn 12 mn

dimanche 20 janvier 13

Page 17: Présentation Performances Montpellier

Essentiellement du scale outD’autres problèmes liés à la mutualisation Coût de la montée en charge

dimanche 20 janvier 13

Page 18: Présentation Performances Montpellier

Agréger des capacités à faible coûtMais la limite reste

dimanche 20 janvier 13

Page 19: Présentation Performances Montpellier

ressources limitées + non restituées = Famine

MémoireConnexion non rendue au pool Lock en interblocage

Les fuites

dimanche 20 janvier 13

Page 20: Présentation Performances Montpellier

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

LockDeadlock ou livelock

Les locks

dimanche 20 janvier 13

Page 21: Présentation Performances Montpellier

Le volume

La répétition

Les timeout

Le fractionnement

L’algorithme

Les lenteurs

dimanche 20 janvier 13

Page 22: Présentation Performances Montpellier

iso-prod Test en charge

Test de vieillissement

Test à petite charge

Test à 1 utilisateur

Analyse de code

dimanche 20 janvier 13

Page 23: Présentation Performances Montpellier

tests en chargetest de concurrencetest de vieillissement

analyse de codemesure unitaire

dimanche 20 janvier 13

Page 24: Présentation Performances Montpellier

L’analyse statique de codeLes tests à 1 utilisateurs

dimanche 20 janvier 13

Page 25: Présentation Performances Montpellier

L’analyse statique de code

Sonar avec PMD et Findbugs

dimanche 20 janvier 13

Page 26: Présentation Performances Montpellier

Temps de réponse serveur

L’analyse d’une requête

dimanche 20 janvier 13

Page 27: Présentation Performances Montpellier

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

L’analyse du temps d’affichage

dimanche 20 janvier 13

Page 28: Présentation Performances Montpellier

HTTPPhases JSFDomainePersistance (JDBC)

Temps par couche {

L’analyse du temps serveur

dimanche 20 janvier 13

Page 29: Présentation Performances Montpellier

L’analyse du temps serveur

Access logs

Perf4J, JMX, MBeans, BTrace, logsDrivers JDBC virtuels (P6Spy, Log4JDBC)

Temps des requêtesTemps de service des disques

dimanche 20 janvier 13

Page 30: Présentation Performances Montpellier

L’analyse du temps serveur

dimanche 20 janvier 13

Page 31: Présentation Performances Montpellier

L’analyse de la base de données

Rapports sur les requêtes les plus longuesExplainIndexEviter les tris (order by, unions) et les cascade

Cache hit/miss

Passer 3 semaines de vacances avec la doc HibernateDéjeuner avec les DBA

dimanche 20 janvier 13

Page 32: Présentation Performances Montpellier

Le profilage du code Java

dimanche 20 janvier 13

Page 33: Présentation Performances Montpellier

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

Page 34: Présentation Performances Montpellier

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

Points d’attention

dimanche 20 janvier 13

Page 35: Présentation Performances Montpellier

Les algorithmes

dimanche 20 janvier 13

Page 36: Présentation Performances Montpellier

Les caches

Le précalcul partiel (arbres de fenwick, raccourcissement d’arbre)

Les heuristiques

L’estimation de probabilité

Algorithmes et répétition

dimanche 20 janvier 13

Page 37: Présentation Performances Montpellier

Latence réseau, MTU

Buffers I/O

Facteurs de blocage SGBD : fetch size File systems : page size

Fragmentation d’espace, compactage

Fragmentations

dimanche 20 janvier 13

Page 38: Présentation Performances Montpellier

Tests simultanés à 2 utilisateurs

dimanche 20 janvier 13

Page 39: Présentation Performances Montpellier

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

Indices de locks

dimanche 20 janvier 13

Page 40: Présentation Performances Montpellier

L’analyse des locks

thread dump

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

visualvm + plugin Threads

dimanche 20 janvier 13

Page 41: Présentation Performances Montpellier

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

Points d’attention et pistes

Alternatives

Avoir une version par thread (Thread Local)

Déplacer le problème (volatile)

Immutabilité et persistent data

dimanche 20 janvier 13

Page 42: Présentation Performances Montpellier

Test de capacité en chargeTest de vieillissement

dimanche 20 janvier 13

Page 43: Présentation Performances Montpellier

LoadGenerator

dimanche 20 janvier 13

Page 44: Présentation Performances Montpellier

Projet Apache Jakarta

Scripts en XML (par IHM) + script lets (javascript, beanshell ... via JSR-223)

ExtensibleMultiprotocoleGestion des cookies et émulation du cache

http://jmeter.apache.org/

dimanche 20 janvier 13

Page 45: Présentation Performances Montpellier

dimanche 20 janvier 13

Page 46: Présentation Performances Montpellier

Vital

Frequent

Risqué

FrequentFrequent

FrequentQue font les utilisateurs

dimanche 20 janvier 13

Page 47: Présentation Performances Montpellier

Enregistrer

Thread Group

Logic Controller

Non Test Element

HTTP Proxy

HTTP Request

Sampler

HTTP Request

Sampler

dimanche 20 janvier 13

Page 48: Présentation Performances Montpellier

Thread Groups

dimanche 20 janvier 13

Page 49: Présentation Performances Montpellier

L’ordre de précédence

Logic Controller

Sampler

Configuration

Pre-Processor

Timers

Post-Processor

Assertion

Listener

configuration

mise à jour de paramètre

attente

requête

extraction de valeur

vérification

visualisation et reporting

TransactionController

IfController

WhileController

dimanche 20 janvier 13

Page 50: Présentation Performances Montpellier

Exemple

Logic Controller

Sampler

Configuration

Pre-Processor

Timer

Post-Processor

Assertion

Listener

Logic ControllerResponseAssertion

RegularExpression Extrator

User Variable

CSV Reader

View Result Tree

dimanche 20 janvier 13

Page 51: Présentation Performances Montpellier

l l

Gestion des mécanismes du navigateur

dimanche 20 janvier 13

Page 52: Présentation Performances Montpellier

Obtenir le résultat

dimanche 20 janvier 13

Page 53: Présentation Performances Montpellier

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

Page 54: Présentation Performances Montpellier

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

Page 55: Présentation Performances Montpellier

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

Page 56: Présentation Performances Montpellier

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

Page 57: Présentation Performances Montpellier

En charge

--no-guiattention à la mémoire (conf de base -Xmx 1024m)

dimanche 20 janvier 13

Page 58: Présentation Performances Montpellier

Biais qui améliorent le résultat

Biais qui dégradent le résultat

dimanche 20 janvier 13

Page 59: Présentation Performances Montpellier

volumesscenario, données, mots clés

cachesdurée du test et vélocité

ignorer les erreursignorer les cas particuliers

SimplifierRanger

dimanche 20 janvier 13

Page 60: Présentation Performances Montpellier

qui fonctionne le mieux ?

A B

dimanche 20 janvier 13

Page 61: Présentation Performances Montpellier

Time Serie

and distribution

dimanche 20 janvier 13

Page 62: Présentation Performances Montpellier

Quelques mauvais temps

Temps instables

Bimodal !? ...

dimanche 20 janvier 13

Page 63: Présentation Performances Montpellier

identifier le coupable

dimanche 20 janvier 13

Page 64: Présentation Performances Montpellier

OPS

DEV

dimanche 20 janvier 13

Page 65: Présentation Performances Montpellier

Ernie

Fred

Greg

identifier le coupable

dimanche 20 janvier 13

Page 66: Présentation Performances Montpellier

Les goulets possibles

dimanche 20 janvier 13

Page 67: Présentation Performances Montpellier

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

Page 68: Présentation Performances Montpellier

CPU taux, longueur de la file d’attente, process runnable

Mémoire utilisation mémoire, swap-in

Réseaunombre de connexions établies nombre d’octets échangés entre les process

Disquelongueur de la file d’attente, octets lus/écrits, temps de service

Surveiller les ressources

dimanche 20 janvier 13

Page 69: Présentation Performances Montpellier

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

Page 70: Présentation Performances Montpellier

Apache module apache-status

JEE via JMX nombre d’éléments de pool actifs

nombre de connexions JDBC établies et activesnombre de messages dans les queues JMSMBeans HibernateMBeans des cachesVos MBeans

Base de donnéesNombre de requêtes, Locks, requêtes coûteuses

Surveiller les ressources

dimanche 20 janvier 13

Page 71: Présentation Performances Montpellier

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

Page 72: Présentation Performances Montpellier

Les Application Performance Management JEE

JavaMelody (open source)

Introscope

PerformaSure

DynaTrace

NewRelic

JXInsight/OpenCore

AppDynamics

dimanche 20 janvier 13

Page 73: Présentation Performances Montpellier

adapter le comportement aux capacités

Le dimensionnement

dimanche 20 janvier 13

Page 74: Présentation Performances Montpellier

Les pools

dimanche 20 janvier 13

Page 75: Présentation Performances Montpellier

Tout ce qui rentre doit ressortir … en moyenne

Le pool est dimensionné par rapport aux ressources

Les files d’attente régulent les variations de débit

Pool

File d’attente

Les pools

dimanche 20 janvier 13

Page 76: Présentation Performances Montpellier

L’entonnoir

dimanche 20 janvier 13

Page 77: Présentation Performances Montpellier

-Xmx Heap

Mémoire de la JVM

dimanche 20 janvier 13

Page 78: Présentation Performances Montpellier

-Xmx

utilisé par le process

Core Stack

disponible sur la machine swap

Heap

Mémoire de la JVM

dimanche 20 janvier 13

Page 79: Présentation Performances Montpellier

JVMTI & JMVPI via JMXLog -verbose:gc + outils type GCViewervisualvmjstat avec les options gcjmap et jhatjClarity Censum (payant)

GC overhead < 5% (temps overhead / uptime)Activité CPU élevée

L’analyse de la mémoire

dimanche 20 janvier 13

Page 80: Présentation Performances Montpellier

Visualvm

(plugin visualgc)

dimanche 20 janvier 13

Page 81: Présentation Performances Montpellier

GCViewer

Log -verbose:gc

dimanche 20 janvier 13

Page 82: Présentation Performances Montpellier

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

Page 83: Présentation Performances Montpellier

Tester, Tester, Tester

Mesurer, Mesurer, Mesurer

Comprendre

Il n’y a pas de potion magique

dimanche 20 janvier 13

Page 85: Présentation Performances Montpellier

Claude Falguiè[email protected]/4mmJQ

Merci

dimanche 20 janvier 13