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