• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Performances Java et OpenDJ - LyonJUG Janv. 2012
 

Performances Java et OpenDJ - LyonJUG Janv. 2012

on

  • 1,622 views

Presentation sur le projet OpenDJ et les performances en Java. Contient une description du fonctionnement de la JVM Hotspot et des divers GC, y compris G1.

Presentation sur le projet OpenDJ et les performances en Java. Contient une description du fonctionnement de la JVM Hotspot et des divers GC, y compris G1.

Statistics

Views

Total Views
1,622
Views on SlideShare
1,451
Embed Views
171

Actions

Likes
3
Downloads
22
Comments
0

3 Embeds 171

http://mj89sp3sau2k7lj1eg3k40hkeppguj6j-a-sites-opensocial.googleusercontent.com 167
http://www.linkedin.com 3
https://www.linkedin.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

    Performances Java et OpenDJ - LyonJUG Janv. 2012 Performances Java et OpenDJ - LyonJUG Janv. 2012 Presentation Transcript

    • Concevoir un serveur ultra-performant en Java : lexpérience du projet OpenDJ Ludovic Poitou Lyon JUG - 17/01/2012 (cc) 2012 ForgeRockWednesday, January 18, 12 1
    • Qui suis-je ? - Ludovic Poitou - Product Manager à ForgeRock - Précédemment, Architecte chez Sun et “Community Manager” pour le projet OpenDS - Plus de 15 ans dexpérience avec LDAP - Architecte de Sun Directory Server 5.2 / 6 - http://ludopoitou.wordpress.com (cc) 2012 ForgeRock 2Wednesday, January 18, 12 2
    • - ForgeRock AS - Février 2010 - Norvège - Editeur de logiciels d’Infrastructure et Sécurité, open source - OpenAM (ex-OpenSSO), OpenDJ (OpenDS), OpenICF, OpenIDM, OpenIG ... - ForgeRock France SAS - Novembre 2010 - Centre de Recherche & Développement à Grenoble - UK, USA, Brésil, Allemagne, Suède, Nouvelle Zélande... (cc) 2012 ForgeRockWednesday, January 18, 12 3
    • Agenda - Une présentation du project OpenDJ - Performances et OpenDJ - Performances et la JVM - Conclusion (cc) 2012 ForgeRockWednesday, January 18, 12 4
    • Le projet OpenDS - Lancé en Open Source en July 2006 - CDDL - Code source : https://opends.dev.java.net/ - Sponsorisé par Sun Microsystems - Ecrit en Java par des experts LDAP (cc) 2012 ForgeRockWednesday, January 18, 12 5
    • - Dérive d’OpenDS - La seule branche activement développée en open source - Soutenue par la communauté - Supporté par ForgeRock (cc) 2012 ForgeRockWednesday, January 18, 12 6
    • Quest ce ? - OpenDJ est un server en Java qui implémente le protocol LDAPv3 et ses services - Il inclut sa propre base de données, - basé sur Berkeley DB Java Edition - Pas accessible directement - Possède toutes les fonctions de sécurité, de contrôle daccès, de gestion de mots de passes pour stocker de façon sécurisée les identités des utilisateurs et machines (cc) 2012 ForgeRockWednesday, January 18, 12 7
    • Pourquoi Faire ? - Stockage générique et orienté objet de données - Pages blanches et carnet dadresses mél - Principalement le coffre fort des Identités - Pour lAuthentication et les Authorizations - Pour les Profiles et Personnalisations - La brique de base de tout SI dans les entreprises - Utilisé par linfrastructure Web et Mail - Le fondement des produits de gestion dIdentité - Gestion dAccès, Fédération, Provisionnage (cc) 2012 ForgeRockWednesday, January 18, 12 8
    • Les Objectifs du Projet OpenDJ - Un jeu complet de Services dAnnuaire - Lannuaire base de données, des services de Proxy dannuaire, des fonctions dannuaire virtuel - Conformes aux standards et extensions LDAPv3 - Capacité de croissance horizontale et verticale - Remplacer Sun Directory Server Enterprise Edition (cc) 2012 ForgeRockWednesday, January 18, 12 9
    • Trois Principes - Facilité dutilisation - Installation, Configuration, Gestion, Surveillance... - Capacité dextension - De nombreuses interfaces ont été définies - Avec des implémentations par défault - Performance - Cest le coeur de cette présentation ! (cc) 2012 ForgeRockWednesday, January 18, 12 10
    • 2.4 - 2.4.0 en Decembre 2010, 2.4.4 en Octobre 2011 - Un serveur dannuaire 100% conforme à LDAPv3 - Nombreuses extensions LDAP standards et expérimentales - Réplication Multi Maitre, avec 3 niveaux de cohérence des données - Fonctions étendues de Sécurité - Sinstalle en 6 clics et moins de 3 minutes - Gestion par outils graphiques et textes - Documentation complète (cc) 2012 ForgeRockWednesday, January 18, 12 11
    • Pour Qui ? - Les opérateurs Télécom, le secteur financier, les portails - Pour stocker les identités des clients, téléphones et services - De 15 à 120 millions dentrées, hautement disponibles - Pour le service de Nommage, ou les PME - OpenSolaris, Solaris, Linux..., couplé avec SAMBA, Intégré avec Kerberos - Pages blanches... (cc) 2012 ForgeRockWednesday, January 18, 12 12
    • Performances & OpenDJ Photo by http://www.flickr.com/photos/nuonsolarteam Photo by http://www.flickr.com/photos/ooocha/ (cc) 2012 ForgeRockWednesday, January 18, 12 13
    • Caractéristiques de Performances - Comme tout serveur, les capacités de montée en charge priment - Jusquà plusieurs dizaines de millions dentrées - Plusieurs milliers de connections - Quel débit dopérations? - Quel temps de réponse moyen ? Photo par Roger Smith http://www.flickr.com/photos/rogersmith/ Maximum ? (cc) 2012 ForgeRockWednesday, January 18, 12 14
    • Environnement de Test - OpenDS 2.2, Solaris 10, ZFS - Le test de base : - 10 M dentrées, taille moyenne 2,6K - Réplication multi-maitre entre 2 serveurs (cc) 2012 ForgeRockWednesday, January 18, 12 15
    • Les réglages du Test - 32GB JVM with tuning - config.ldif - ds-cfg-db-cache-percent: 70 - ds-cfg-etime-resolution: nanoseconds - ds-cfg-num-request-handlers: 4 - Replication ON (cc) 2012 ForgeRockWednesday, January 18, 12 16
    • Searchrate sur x4170 (cc) 2012 ForgeRockWednesday, January 18, 12 17
    • Modrate sur x4170 (cc) 2012 ForgeRockWednesday, January 18, 12 18
    • Environnement de Test - OpenDJ 2.5.0 Nightly - Intel Core i7, 2.2 GHz - Linux 3.0, Local disk - 2 GB JVM with tuning - 10 000 entrées, taille moyenne 2,6K (cc) 2012 ForgeRockWednesday, January 18, 12 19
    • Searchrate - $ bin/searchrate -h matts-laptop.local -p 1389 -D cn=director manager -w password -g "rand(0,10000)" -c 32 -t 4 -F -b "dc=example,dc=com" "(uid=user. %d)" ------------------------------------------------------------------------------- Throughput Response Time (ops/second) (milliseconds) recent average recent average 99.9% 99.99% 99.999% err/sec Entries/Srch ------------------------------------------------------------------------------- 45538.6 46125.7 2.916 2.863 12.556 20.334 33.366 0.0 1.0 46238.0 46126.2 2.866 2.863 12.565 20.310 33.283 0.0 1.0 46563.7 46128.3 2.845 2.863 12.565 20.283 33.237 0.0 1.0 46374.9 46129.4 2.866 2.863 12.558 20.256 33.202 0.0 1.0 45679.3 46127.3 2.902 2.863 12.553 20.242 33.114 0.0 1.0 45951.9 46126.5 2.864 2.863 12.554 20.232 33.077 0.0 1.0 45549.4 46123.9 2.878 2.863 12.547 20.213 33.005 0.0 1.0 - CPU : 17% idle. - NewGen GC every 500ms, 4ms pauses, average. (cc) 2012 ForgeRockWednesday, January 18, 12 20
    • Modrate - $ ./bin/modrate -h matts-laptop.local -p 1389 -w password -D "cn=directory manager" -g "rand(0,10000)" -g "randstr(10)" -c 8 -t 1 -F -b "uid=user.%d,ou=people,dc=example,dc=com" description:%2$s ----------------------------------------------------------------- Throughput Response Time (ops/second) (milliseconds) recent average recent average 99.9% 99.99% 99.999% err/sec ----------------------------------------------------------------- 13622.0 13140.0 2.346 2.432 173.866 252.059 324.275 0.0 13266.3 13145.3 2.408 2.431 173.597 251.477 324.444 0.0 12591.1 13143.2 2.539 2.431 178.187 251.988 347.243 0.0 13120.3 13142.9 2.435 2.431 178.403 252.563 347.559 0.0 12937.8 13140.0 2.469 2.432 178.540 252.418 347.559 0.0 13242.5 13141.4 2.413 2.431 178.533 252.230 347.549 0.0 13631.0 13148.1 2.343 2.430 178.421 252.139 347.559 0.0 - CPU : 60% idle, ~11MB/sec written to disks - NewGen GC every 1s, 10ms pauses, average. (cc) 2012 ForgeRockWednesday, January 18, 12 21
    • Modrate - Moving the DB to a TEMPFS - $ ./bin/modrate -h matts-laptop.local -p 1389 -w password -D "cn=directory manager" -g "rand(0,10000)" -g "randstr(10)" -c 8 -t 1 -F -b "uid=user.%d,ou=people,dc=example,dc=com" description:%2$s ----------------------------------------------------------------- Throughput Response Time (ops/second) (milliseconds) recent average recent average 99.9% 99.99% 99.999% err/sec ----------------------------------------------------------------- 17888.4 17438.8 1.785 1.832 18.294 30.490 117.054 0.0 18037.6 17455.4 1.771 1.830 18.235 30.320 117.626 0.0 18041.9 17471.3 1.770 1.829 18.236 30.057 117.356 0.0 17339.9 17467.8 1.842 1.829 18.212 30.616 117.093 0.0 18067.1 17483.2 1.768 1.827 18.213 30.524 117.054 0.0 18002.4 17496.2 1.775 1.826 18.245 30.521 117.017 0.0 17309.5 17491.6 1.845 1.826 18.252 30.355 117.093 0.0 (cc) 2012 ForgeRockWednesday, January 18, 12 22
    • Comment Obtenir de Tels Résultats ? - 2 Aspects - Le code - Le run-time : loptimisation de la JVM et du Garbage Collector - Une relation très forte entre la conception du code et la gestion mémoire (cc) 2012 ForgeRockWednesday, January 18, 12 23
    • Attention aux Tests de Performance - Des tests reproductibles - Maitrise du système et de lenvironnement - Avec 100 000 entrées LDAP lues par seconde, le goulet peut être le réseau - Utilisation de 10GB ethernet (cc) 2012 ForgeRockWednesday, January 18, 12 24
    • La JVM et les Performances “Tuning GC” est un art ! Photo par Kecko http://www.flickr.com/people/kecko/ (cc) 2012 ForgeRockWednesday, January 18, 12 25
    • GC dans la VM HotSpot - 3 GCs disponibles: - Serial GC - Parallel GC / Parallel Old GC - Concurrent Mark-Sweep GC (CMS) - Et mainteant Garbage First (G1) (cc) 2012 ForgeRockWednesday, January 18, 12 26
    • Gestion du Tas (Pour Tous les GCs) Young Generation Old Generation Permanent Generation (cc) 2012 ForgeRockWednesday, January 18, 12 27
    • Young Generation Allocation (new Object()) Eden Survivor Spaces (cc) 2012 ForgeRockWednesday, January 18, 12 28
    • Old Generation Promotion (survivors from the Young Generation) (cc) 2012 ForgeRockWednesday, January 18, 12 29
    • Permanent Generation Permanent Generation Allocation (only directly from the JVM) (cc) 2012 ForgeRockWednesday, January 18, 12 30
    • Le GC Rêvé - Idéalement il faudrait un GC avec - une faible consommation CPU, - des temps de pauses infimes et - efficace en occupation mémoire - Malheureusement, vous ne pouvez en choisir que 2 ! Photo par Craig Gorcott http://www.flickr.com/photos/craigweb/ (cc) 2012 ForgeRockWednesday, January 18, 12 31
    • Conseil pour régler la taille du tas de la JVM LE PLUS GROS POSSIBLE (cc) 2012 ForgeRockWednesday, January 18, 12 32
    • Un Equilibre à Trouver - Généralement, plus gros est l’espace mémoire, le mieux! - Valable pour les 2 espaces (Young Gen, Old Gen) - Un grand espace = des GCs moins fréquents, moins d’utilisation CPU, des objets qui sont vraiment détruits - Un petit espace = des GCs plus rapide (pas toujours) - Quelques fois, la taille maximale dépend de la mémoire physique et/ou de l’espace d’adressage de la JVM - Il faut trouver léquilibre entre les tailles des générations (cc) 2012 ForgeRockWednesday, January 18, 12 33
    • L’Impact des Tailles des Générations - La taille de la “Young Generation” - Détermine la fréquence des GCs mineurs - Détermine combien d’objets vont être récoltés - Ainsi que le “Tenuring Threshold” et la taille des “Survivor Spaces” - Old Generation - Doit contenir les données permanentes de l’application - Réduire la fréquence des GCs majeurs le plus possible (cc) 2012 ForgeRockWednesday, January 18, 12 34
    • 2 Points Très Importants - Essayer de maximiser le nombre d’objets collectés dans la “Young generation” - L’empreinte mémoire de l’application ne doit pas dépasser la la taille de la mémoire physique - Ceci est valable quelque soit le GC (cc) 2012 ForgeRockWednesday, January 18, 12 35
    • Régler la “Young Generation” (cc) 2012 ForgeRockWednesday, January 18, 12 36
    • Dimensioner la Taille Mémoire - -Xmx<size> : Taille mémoire max. (young + old generation) - -Xms<size> : Taille mémoire initiale (young + old generation) - -Xmn<size> : Taille mémoire pour la “Young generation” - Pour contrôler les performances, il est préférable de mettre -Xms and -Xmx à la même valeur - Quand -Xms != -Xmx, l’accroissement ou diminution de la mémoire nécessite un GC complet. (cc) 2012 ForgeRockWednesday, January 18, 12 37
    • Dimensioner la “Young Generation” - La taille de l’Eden influence - La fréquence des GCs mineurs - Les objets qui seront réclamés à l’age 0 - Les objets alloué dans l’Eden ont un age 0 - L’age est incrémenté chaque GC mineur - Augmenter la taille de l’Eden n’impact pas toujours la durée des GCs mineurs : celle ci est proportionnelle au nombre d’objets copiés (objets vivants) (cc) 2012 ForgeRockWednesday, January 18, 12 38
    • Dimensionner les Espaces Mémoires - -XX:NewSize=<size> : Taille initiale de la “Young generation” - -XX:MaxNewSize=<size> : Taille maximale de la “Young generation” - -XX:NewRatio=<ratio> : Ratio entre “young generation” et “old generation” - Pour contrôler les performances, préférer -Xmn qui combine -XX:NewSize et -XX:MaxNewSize (cc) 2012 ForgeRockWednesday, January 18, 12 39
    • Tenuring - -XX:TargetSurvivorRatio=<%>, e.g., 50 - Pourcentage d’occupation de l’espace “Survivor” - Laisser de l’espace pour gérer les pics - -XX:InitialTenuringThreshold=<threshold> - -XX:MaxTenuringThreshold=<threshold> - -XX:+AlwaysTenure - Ne rien garder dans les “Survivor” - -XX:+NeverTenure - Une très mauvaise idée (cc) 2012 ForgeRockWednesday, January 18, 12 40
    • Tenuring : Avantages & Inconvénients - Maintenir le plus d’objets dans les espaces “Survivor” pour qu’ils soient collectés dans la “Young generation” - Moins de promotion vers la “Old generation” - Moins de GCs de la “Old generation” - Mais éviter les nombreuses copies entre espaces “Survivor” - Augmente le cout des GCs mineurs - Un équilibre difficile à trouver - Généralement, il vaut mieux copier que promouvoir (cc) 2012 ForgeRockWednesday, January 18, 12 41
    • Garbage First (cc) 2012 ForgeRockWednesday, January 18, 12 42
    • LE GC Garbage First (G1) - Nouveauté de la JVM HotSpot dans JDK 7 - Le replacement à long terme du GC “Concurrent Mark-Sweep” (CMS) - Objectif : plus de “Stop the World” GC ! - Version expérimentale de G1 dans Java SE 6 depuis la version mineur 14 - Utilisable avec Java 7u2 (cc) 2012 ForgeRockWednesday, January 18, 12 43
    • Caractèristiques de G1 - Le remplacement de CMS - Un GC pour les Serveurs - Parallèle, Concurrent - S’appuie sur des Générations - Auto Compactant - Facile d’utilisation - Prédictif (mais pas temps réel) - Les étapes principales sont: remembered set (RS) maintenance, concurrent marking, and evacuation pauses. (cc) 2012 ForgeRockWednesday, January 18, 12 44
    • G1: Les Options de la JVM - -XX:+UseG1GC (-XX:+UnlockExperimentalVMOptions) - Temps de pause (pas garanti, sinon utiliser Java Temps Réel) - -XX:MaxGCPauseMillis=50 (objectif de 50 millisecondes) - -XX:GCPauseIntervalMillis=1000 (objectif de 1000 msecs) - Taille des régions: -XX:G1HeapRegionSize=4M (de 1 a 32M) (cc) 2012 ForgeRockWednesday, January 18, 12 45
    • OpenDJ et CMS - Les options - CMS + Occupency - NewGenSize = ¼ de la taille mémoire (jusqu’à 2GB) - MaxTenuringThreshold = 1 - Temps de pause maximum GC mineur ~ 100ms - Mais Full GC en écriture ! > 10 seconds ☹ (cc) 2012 ForgeRockWednesday, January 18, 12 46
    • OpenDS et G1 - Objectif: Eviter le GC Complet, meilleur contrôle des temps de pause - Collaboration entre les équipes Sun HotSpot et OpenDS - OpenDS est utilisé comme application de référence - + de 20 améliorations integrées dans G1 suite aux tests - Améliorations par 10 des performances de G1 avec de grandes zones mémoires (cc) 2012 ForgeRockWednesday, January 18, 12 47
    • OpenDJ, G1 et Java 7u2 - export OPENDS_JAVA_ARGS="-server -Xmx2G -Xms2G -Xmn512M -XX:+UseG1GC - XX:MaxGCPauseMillis=10 -XX:G1HeapRegionSize=4M -XX:MaxTenuringThreshold=1 -XX: +PrintGCTimeStamps -XX:+PrintGCDetails -XX:+UseCompressedOops" - Modrate, TEMPFS: G1: 16676.3 16373.0 1.916 1.952 18.973 28.206 59.249 0.0 16305.4 16372.4 1.960 1.952 18.966 28.160 57.163 0.0 16695.9 16375.1 1.911 1.951 18.941 28.123 59.249 0.0 16463.6 16375.8 1.943 1.951 18.927 28.104 59.924 0.0 CMS: 18041.9 17471.3 1.770 1.829 18.236 30.057 117.356 0.0 - G1 consomme plus de CPU, mais est plus prédictif - Reste à tester avec de grosses JVM (16 à 64 GB) - G1 enfin utilisable avec Java 7u2 (cc) 2012 ForgeRockWednesday, January 18, 12 48
    • Le Contrôle du GC - En direct: - VisualVM: http://visualvm.dev.java.net/ - VisualGC: Photo par Rennett Stowe http://www.flickr.com/photos/tomsaint/ - http://java.sun.com/performance/jvmstat/ - VisualGC est aussi un module extension de VisualVM - Peut surveiller plusieurs VM dans le même outil - A posteriori - GC Logging, PrintGCStats (cc) 2012 ForgeRockWednesday, January 18, 12 49
    • Le Journal du GC Activé en Production - Activer le journal du GC en production sans crainte - Très utile pour analyser, diagnostiquer un problème - Coût en performance extrêmement faible - Peut-être quelques gros fichiers à gérer - Il y a toujours des clients qui ont peur d’activer les logs - Un (gros) client de Sun a dit : “If someone doesnt enable GC logging in production, I shoot them!” (cc) 2012 ForgeRockWednesday, January 18, 12 50
    • Paramètres pour le Journal du GC - -XX:+PrintGCTimeStamps - Ajouter -XX:+PrintGCDateStamps si besoin - -XX:+PrintGCDetails - Donne plus de détails que -verbosegc - Mais aussi: - -Xloggc:<fichier> - Permet de séparer les sorties du GC de celles de l’application (cc) 2012 ForgeRockWednesday, January 18, 12 51
    • G1 +PrintGCDetails - [Times: user=0.03 sys=0.00, real=0.01 secs] 1440.790: [GC pause (young), 0.00716200 secs]    [Parallel Time:   5.4 ms]       [GC Worker Start Time (ms):  1440790.5  1440790.6  1440790.6  1440790.6  1440790.6  1440792.1  1440792.1  1440792.1        Avg: 1440791.1, Min: 1440790.5, Max: 1440792.1, Diff:   1.6]       [Update RS (ms):  0.7  0.6  0.2  0.7  0.0  0.0  0.0  0.7        Avg:   0.4, Min:   0.0, Max:   0.7, Diff:   0.7]          [Processed Buffers : 8 7 1 11 0 0 0 11           Sum: 38, Avg: 4, Min: 0, Max: 11, Diff: 11]       [Ext Root Scanning (ms):  2.3  2.7  2.9  2.3  2.0  1.8  1.6  1.0        Avg:   2.1, Min:   1.0, Max:   2.9, Diff:   1.9]     [Mark Stack Scanning (ms):  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0        Avg:   0.0, Min:   0.0, Max:   0.0, Diff:   0.0]       [Scan RS (ms):  0.2  0.0  0.2  0.1  0.0  0.0  0.2  0.2        Avg:   0.1, Min:   0.0, Max:   0.2, Diff:   0.2]       [Object Copy (ms):  0.5  0.3  0.4  0.5  2.5  0.3  0.3  0.2        Avg:   0.6, Min:   0.2, Max:   2.5, Diff:   2.3]       [Termination (ms):  0.9  0.9  0.9  0.9  0.0  0.9  0.9  0.9        Avg:   0.8, Min:   0.0, Max:   0.9, Diff:   0.9]          [Termination Attempts : 2 2 1 1 1 1 2 2           Sum: 12, Avg: 1, Min: 1, Max: 2, Diff: 1]       [GC Worker End Time (ms):  1440795.2  1440795.1  1440795.1  1440795.1  1440795.1  1440795.1  1440795.2  1440795.2        Avg: 1440795.1, Min: 1440795.1, Max: 1440795.2, Diff:   0.1]       [GC Worker Times (ms):  4.6  4.6  4.5  4.5  4.5  3.0  3.0  3.0        Avg:   4.0, Min:   3.0, Max:   4.6, Diff:   1.6]       [Parallel Other:   1.4 ms]    [Clear CT:   0.2 ms]    [Other:   1.6 ms]       [Choose CSet:   0.0 ms]       [Ref Proc:   0.3 ms]       [Ref Enq:   0.0 ms]    [Eden: 511M(511M)->0B(511M) Survivors: 1024K->1024K Heap: 747M(2048M)->236M(2048M)]  [Times: user=0.03 sys=0.00, real=0.01 secs] (cc) 2012 ForgeRockWednesday, January 18, 12 52
    • PrintGCStats - Analyse et résume les journaux du GC - Un script disponible - http://java.sun.com/developer/technicalArticles/ Programming/turbo/PrintGCStats.zip - Usage - PrintGCStats -v cpus=<num> <gc log file> - Ou <num> est le nombre de CPU de la machine qui a produit les logs. - Peut ne pas marcher avec certains paramètres du log du GC (cc) 2012 ForgeRockWednesday, January 18, 12 53
    • PrintGCStats Parallel GC - what count total mean max stddev gen0t(s) 193 11.470 0.05943 0.687 0.0633 gen1t(s) 1 7.350 7.34973 7.350 0.0000 GC(s) 194 18.819 0.09701 7.350 0.5272 alloc(MB) 193 11244.609 58.26222 100.875 18.8519 promo(MB) 193 807.236 4.18257 96.426 9.9291 used0(MB) 193 16018.930 82.99964 114.375 17.4899 used1(MB) 1 635.896 635.89648 635.896 0.0000 used(MB) 194 91802.213 473.20728 736.490 87.8376 commit0(MB) 193 17854.188 92.50874 114.500 9.8209 commit1(MB) 193 123520.000 640.00000 640.000 0.0000 commit(MB) 193 141374.188 732.50874 754.500 9.8209 alloc/elapsed_time = 11244.609 MB / 77.237 s = 145.586 MB/s alloc/tot_cpu_time = 11244.609 MB / 1235.792 s = 9.099 MB/s alloc/mut_cpu_time = 11244.609 MB / 934.682 s = 12.030 MB/s promo/elapsed_time = 807.236 MB / 77.237 s = 10.451 MB/s promo/gc0_time = 807.236 MB / 11.470 s = 70.380 MB/s gc_seq_load = 301.110 s / 1235.792 s = 24.366% gc_conc_load = 0.000 s / 1235.792 s = 0.000% gc_tot_load = 301.110 s / 1235.792 s = 24.366% (cc) 2012 ForgeRockWednesday, January 18, 12 54
    • PrintGCStats CMS - what count total mean max stddev gen0(s) 110 24.381 0.22164 1.751 0.2038 gen0t(s) 110 24.397 0.22179 1.751 0.2038 cmsIM(s) 3 0.285 0.09494 0.108 0.0112 cmsRM(s) 3 0.092 0.03074 0.032 0.0015 GC(s) 113 24.774 0.21924 1.751 0.2013 cmsCM(s) 3 2.459 0.81967 0.835 0.0146 cmsCP(s) 6 0.971 0.16183 0.191 0.0272 cmsCS(s) 3 14.620 4.87333 4.916 0.0638 cmsCR(s) 3 0.036 0.01200 0.016 0.0035 alloc(MB) 110 11275.000 102.50000 102.500 0.0000 promo(MB) 110 1322.718 12.02471 104.608 11.8770 used0(MB) 110 12664.750 115.13409 115.250 1.2157 used(MB) 110 56546.542 514.05947 640.625 91.5858 commit0(MB) 110 12677.500 115.25000 115.250 0.0000 commit1(MB) 110 70400.000 640.00000 640.000 0.0000 commit(MB) 110 83077.500 755.25000 755.250 0.0000 alloc/elapsed_time = 11275.000 MB / 83.621 s = 134.835 MB/s alloc/tot_cpu_time = 11275.000 MB / 1337.936 s = 8.427 MB/s alloc/mut_cpu_time = 11275.000 MB / 923.472 s = 12.209 MB/s promo/elapsed_time = 1322.718 MB / 83.621 s = 15.818 MB/s promo/gc0_time = 1322.718 MB / 24.397 s = 54.217 MB/s gc_seq_load = 396.378 s / 1337.936 s = 29.626% gc_conc_load = 18.086 s / 1337.936 s = 1.352% gc_tot_load = 414.464 s / 1337.936 s = 30.978% (cc) 2012 ForgeRockWednesday, January 18, 12 55
    • En Résumé - OpenDJ: Un serveur LDAP en Java, open source - Simple à installer et utiliser - Conçu pour de hautes performances et haute disponibilité - OpenDJ pour une version supportée (et améliorée) - Le paramètrage de la JVM et du GC est un Art - Lingénierie des performances, un métier ! - Comprendre la JVM et les GCs est indispensable - Qui a dit que Java est lent ! (cc) 2012 ForgeRockWednesday, January 18, 12 56
    • Maintenant... - Essayez OpenDJ: - http://www.opendj.org - IRC: #opendj on freenode.net - Participez ! (cc) 2012 ForgeRockWednesday, January 18, 12 57
    • Concevoir un serveur ultra-performant en Java : lexpérience du projet OpenDJ - Ludovic Poitou - ludovic.poitou@ForgeRock.com - Twitter: @LudoMP - Blog: http://ludopoitou.wordpress.com - https://plus.google.com/116489828651245331071 (gplus.to/ludomp) (cc) 2012 ForgeRockWednesday, January 18, 12 58