Slide 1

Slide 1 text

Performance Pudding Une recette simple et économique Septembre 2015 @vberetti #ippevent

Slide 2

Slide 2 text

Ippon Technologies @ 2015 Proposée par Vincent Beretti ○ architecte au pôle conseil ○ @vberetti Une recette simple et économique Facile Bon marché Performance pudding €

Slide 3

Slide 3 text

Ippon Technologies @ 2015 ● des concepts ● des ingrédients ● des outils ● de l’inspiration En détail ● Ecosystème ● Méthodologie ● Système ● JVM ● Applicatif ● Tirs de performances Au menu d’aujourd’hui

Slide 4

Slide 4 text

Ippon Technologies @ 2014 Ecosystème

Slide 5

Slide 5 text

Ippon Technologies @ 2015 Ecosystème Bien connaître son système ● Prenons une application classique ○ Frontend en Angular ○ Backend en Java/JAX-RS ○ Base de données sur PostgreSQL ● Le problème de performance peut venir ○ du front ○ du back ○ de la base de données

Slide 6

Slide 6 text

Ippon Technologies @ 2015 Ecosystème ● Le problème de performance peut venir - du front - de la JVM - du back - de Jetty - de la base de données - de Apache - de l’OS

Slide 7

Slide 7 text

Ippon Technologies @ 2015 Ecosystème Firewall NAS Firewall ● Le problème de performance peut venir ...

Slide 8

Slide 8 text

Ippon Technologies @ 2015 Une brève histoire du temps … ou pas Tps Ratio Analogie L1 cache 0.5ns 1 1 s Main Memory access 100ns 200 3 min Send 1KB over Gbps network 10,000ns 20,000 5 h Read seq 1MB from Memory 250,000ns 500,000 5 days Round trip in same datacenter 500,000ns 1,000,000 11 days Read seq 1MB from SSD 1,000,000ns 2,000,000 1 month Read seq 1MB from Disk 20,000,000ns 40,000,000 1.5 years Send Packet US -> Europe -> US 150,000,000ns 300,000,000 10 years x 80 ! “Numbers Everyone Should Know” - Jeff Dean Building Software Systems at Google and Lessons Learned

Slide 9

Slide 9 text

Ippon Technologies @ 2014 Méthodologie

Slide 10

Slide 10 text

Ippon Technologies @ 2015 Brendan Gregg ● Anti-methodologies ○ Street-light ○ Drunk man ○ Blame someone else ● Méthodes ○ Workload method ■ Who, Why, What, How ○ USE ■ Utilisation, Saturation, Errors

Slide 11

Slide 11 text

Ippon Technologies @ 2014 Système

Slide 12

Slide 12 text

Ippon Technologies @ 2015 Système ● Swap ● Virtual machine ● I/O Attention ces slides ne sont pas des slides sur Windowsme Merci de votre compréhension

Slide 13

Slide 13 text

Ippon Technologies @ 2015 Swap Mécanisme d’extension de la mémoire en utilisant virtuellement une partie du disque comme de la mémoire physique RAM Disk Virtual Memory Page Fault !! page Chargement des pages du disques vers la RAM Ratio vitesse de lecture RAM/Disk : 1/80 !

Slide 14

Slide 14 text

Ippon Technologies @ 2015 Swap - Visualisation si : Amount of memory swapped in from disk (/s) so : Amount of memory swapped to disk (/s)

Slide 15

Slide 15 text

Ippon Technologies @ 2015 Swap - Configuration ● Swappiness ○ Représente la tendance du système à utiliser le Swap. (0 - 100) ○ Par défaut à 60 ○ ○ Swappiness à 1 ○ Ajout de RAM

Slide 16

Slide 16 text

Ippon Technologies @ 2015 top vmstat Chef us user % utilisé par du code client sy system % CPU utilisé par le système id idle % CPU non-utilisé wa wait % en attente d’I/O st steal % en attente de l’hyperviseur

Slide 17

Slide 17 text

Ippon Technologies @ 2015 Steal: Cauchemar en VMs Attention à la sur-allocation CPU/Mémoire Read The F***in’ VMWare Recipe ● Reservation processeur: le CPU virtuel est lié à un CPU physique ● Idem pour la mémoire 4 CPUs 0 1 2 3 8 GB RAM 4 CPUs 0 1 2 3 6 GB RAM 2 CPUs 0 1 3 GB RAM Physique (Host) VM-1 (Guest) CPU : 4 + 2 != 4 RAM : 6 + 3 != 8 VM-2 (Guest) VM1 et VM2 veulent utiliser en même temps tous les CPUs alloués.

Slide 18

Slide 18 text

Ippon Technologies @ 2015 iowait Réseau ? Disques ?

Slide 19

Slide 19 text

Ippon Technologies @ 2015 Egalement dans Systat sar mode collecte qui permet de récuperer et d’analyser sur un historique les valeurs de CPU, mémoire, I/O, ... mpstat Liste l’activité par CPU

Slide 20

Slide 20 text

Ippon Technologies @ 2014 JVM

Slide 21

Slide 21 text

Ippon Technologies @ 2015 JVM ● JIT - Just In Time ● Garbage Collector ● Thread Dump

Slide 22

Slide 22 text

Ippon Technologies @ 2015 Cuisson Just In Time ● JIT Compiler ○ traduit le bytecode en instructions processeur ○ et l’optimise ! ● Oubliez les ○ “Je vais mettre des final partout pour que la JVM optimise” ○ “Je vais inliner cette methode pour économiser un appel” ○ “Je vais ré-ordonner les conditions parce que celle la est plus utilisée” ○ “Je fais un benchmark en faisant tourner 100 fois la méthode”

Slide 23

Slide 23 text

Ippon Technologies @ 2015 Cuisson Just In Time ● Optimiser ? le JIT le fera mieux que vous car : ○ il est plus intelligent ○ il le fait dynamiquement ● Optimisation ○ Statique : re-ordering, nettoyage, pre-compute, read cache, inlining, Class Hierarchy Analysis, ... ○ Dynamique (au cours des executions) ■ optimise agressivement pour le chemin “courant” ■ dé-optimise pour s’adapter et ré-optimiser

Slide 24

Slide 24 text

Ippon Technologies @ 2015 Garbage Collector ● Garbage collector ○ Nettoyage automatique de la Heap ■ Old/New ○ Plusieurs algorithmes ■ throughput/low latency ○ [Java 8] par défaut Parallel (throughput) Stop-the-world Stop-the-world Initial Mark Mark/Preclean Final Remark Concurrent Sweep

Slide 25

Slide 25 text

Ippon Technologies @ 2015 Garbage Collector : quel impacts ? ● Minor GC ○ nettoyage New ● Major GC ○ Nettoyage Old ● Full GC ○ Quand ? ■ si une Major GC ne nettoie pas assez ■ si la heap est trop fragmentée ○ Tout se stoppe et grand nettoyage ○ Impact sur les performances si trop fréquent ○ Swap ?! En plus de tout stopper, chargement depuis le disque !

Slide 26

Slide 26 text

Ippon Technologies @ 2015 ● Outils ○ Activer les logs du GC ○

Slide 27

Slide 27 text

Ippon Technologies @ 2015 Garbage Collector Au besoin ● JVisualVM + plugin VisualGC ●

Slide 28

Slide 28 text

Ippon Technologies @ 2015 Thread Dump ● Threads avec leur statut et leur stacktrace. ○ Brut ( ) ○ En visuel ( )

Slide 29

Slide 29 text

Ippon Technologies @ 2015 Thread dump ● Status des threads ○ RUNNABLE ○ WAITING ○ BLOCKED ● Exemple d’utilisation: repèrer une contention "BLOCKED_TEST pool-1-thread-1" prio=6 tid=0x0000000006904800 nid=0x28f4 runnable [0x00785f000] java.lang.Thread.State: RUNNABLE at java.io.FileOutputStream.writeBytes(Native Method) ... - locked <0x0000000780a000b0> (a com.nbp.theplatform.threaddump.ThreadBlockedState) at com.nbp.theplatform.threaddump.ThreadBlockedState$1.run(ThreadBlockedState.java:7) at java.lang.Thread.run(Thread.java:662) "BLOCKED_TEST pool-1-thread-2" prio=6 tid=0x0000000007673800 nid=0x260c waiting for monitor entry [0x008abf000] java.lang.Thread.State: BLOCKED (on object monitor) at com.nbp.theplatform.threaddump.ThreadBlockedState.monitorLock(ThreadBlockedState.java:43) - waiting to lock <0x0000000780a000b0> (a com.nbp.theplatform.threaddump.ThreadBlockedState) ...

Slide 30

Slide 30 text

Ippon Technologies @ 2014 Applicatif

Slide 31

Slide 31 text

Ippon Technologies @ 2015 Applicatif Thread pools Caches logger.debug() Synchronized @OneToMany(fetch=FetchType.EAGER) Tx Requires New propagation N+1 SELECT Pagination Session timeout Tx Serializable isolation level static Maps

Slide 32

Slide 32 text

Ippon Technologies @ 2015 Applicatif Thread pools Caches logger.debug() Synchronized @OneToMany(fetch=FetchType.EAGER) Tx Requires New propagation N+1 SELECT Pagination Session timeout Tx Serializable isolation level static Maps ● Monitorer le Hit Ratio du cache ○ Hit Ratio = Hits / (Hits + Misses) ● Un Hit Ratio trop faible peut impacter négativement la mémoire

Slide 33

Slide 33 text

Ippon Technologies @ 2014 Tirs de performance

Slide 34

Slide 34 text

Ippon Technologies @ 2015 Junk food benches “Prends une VM à 2 CPU, on divisera par 2 les temps de réponse” “Attends, je préchauffe l’application en affichant la homepage” “Je ne sais pas ce qu’il s’est passé, on ne fait juste des tests black-box !” “Les resultats des tirs ? Le temps médian est de 200ms” “Ils veulent que le site réponde en moins d’une seconde” ...

Slide 35

Slide 35 text

Ippon Technologies @ 2015 Mediane et Percentiles ● Médiane ○ la moitié des requêtes a un temps de réponse inférieur ou égal ○ et l’autre moitié ? ○ et le max ? ● Percentiles ○ 50%ile == médiane ○ 99%ile seul 1% des requêtes sont plus lentes ○ 99.999%ile seul 0.001% des requêtes sont plus lentes Mesurer un eventail de percentiles (75%, 90%, ...)

Slide 36

Slide 36 text

Ippon Technologies @ 2015 Percentiles ?

Slide 37

Slide 37 text

Ippon Technologies @ 2015 Seuil de performance ● Comprendre l’impact fonctionnel de la definition d’un seuil de performance Requetes/session 50%ile 95%ile 99%ile 99.9%ile 99.999%ile 25 +100% +100% 25% 2.5% 0.0025% 50 +100% +100% 50% 5% 0.05% 100 +100% +100% 100% 10% 0.1% Risque pour un utilisateur unique d’avoir pendant sa session un temps de réponse supérieur à un percentile donné. ● Définir le niveau d'exigence en rapport avec un coût de mise en oeuvre.

Slide 38

Slide 38 text

Ippon Technologies @ 2015 En bref

Slide 39

Slide 39 text

Ippon Technologies @ 2014 ?

Slide 40

Slide 40 text

Ippon Technologies @ 2015 Pointeurs ● https://www.parleys.com/tutorial/priming-java-speed ● https://www.parleys.com/tutorial/how-i-not-i-measure-latency ● http://techblog.netflix.com/2015/08/netflix-at-velocity-2015-linux.html Crédit Photos ● https://flic.kr/p/ofMfMs ● https://flic.kr/p/7S6smv ● http://commons.wikimedia.org/wiki/File:Plum_pudding.jpg

Slide 41

Slide 41 text

Ippon Technologies - 43, avenue de la grande Armée 75116 Paris 01 46 42 48 48 - [email protected] - www.ippon.fr - blog.ippon.fr - www.ipponusa.com - www.ippon-hosting.com