SlideShare une entreprise Scribd logo
1  sur  147
Télécharger pour lire hors ligne
OOM m’a tuer    Renaud Bruyeron @brew_your_own
                           Frank Pavageau @fpavageau




                                                        1
Monday, April 23, 12
Agenda




                  1. La scène du crime

                  2. La gestion de la mémoire dans la JVM: les bases, les outils

                  3. Application




                                                                                   2
Monday, April 23, 12
Renaud Bruyeron @brew_your_own


                          CTO d’



                  •    Débuts au

                  •    C -> Perl -> PHP -> Java




                                                  3
Monday, April 23, 12
Renaud Bruyeron @brew_your_own


                          CTO d’



                  •    Débuts au

                  •    C -> Perl -> PHP -> Java




                                                  3
Monday, April 23, 12
Frank Pavageau @fpavageau


                            Architecte Senior


                       •   C++ -> PHP -> Java

                       •   Systèmes et devops

                       •   Tech Lead socle eCommerce




                                                       4
Monday, April 23, 12
Frank Pavageau @fpavageau


                            Architecte Senior


                       •   C++ -> PHP -> Java

                       •   Systèmes et devops

                       •   Tech Lead socle eCommerce




                                                       4
Monday, April 23, 12
Une Plateforme web
                        e-commerce B2C
              Apache
              Tomcat
              Oracle




                                            5
Monday, April 23, 12
Une Plateforme web
                        e-commerce B2C
              Apache




                              •12+ Serveurs
              Tomcat




                              •10 Webapps différentes
                              •50+ JVMs Oracle (JDK6)
              Oracle




                                                        5
Monday, April 23, 12
Une Plateforme web
                        e-commerce B2C
              Apache




                              •12+ Serveurs
              Tomcat




                              •10 Webapps différentes
                              •50+ JVMs Oracle (JDK6)


                                                  •> 30000 sessions
                                                  •250-400 Req/s
              Oracle




                                                  •Variance très importante du trafic


                                                                                       5
Monday, April 23, 12
... une victime un peu atypique...

                                   Modélisation du catalogue sous forme de Graphe
                                   Implémentation custom du moteur de catalogue
                                           100% sur la Heap (pas de BDD)
                                        Mise à jour par AtomicReference.set()




                                                                                    6
Monday, April 23, 12
... une victime un peu atypique...

                                   Modélisation du catalogue sous forme de Graphe
                                   Implémentation custom du moteur de catalogue
                                           100% sur la Heap (pas de BDD)
                                        Mise à jour par AtomicReference.set()




                                                         Impossible de “cacher” aggressivement
                                                       Beaucoup d’objets créés à chaque Request
                                                    Raccordements SI = latence = concurrence élevée




                                                                                                      6
Monday, April 23, 12
vs.




                       Débit         Latence




                                               7
Monday, April 23, 12
8
Monday, April 23, 12
Application interactive:
                        Il faut privilégier les
                         temps de réponse!




                                                  8
Monday, April 23, 12
Le flagrant délit
                       Connections JDBC




                           Temps




                                                             9
Monday, April 23, 12
Le flagrant délit
                       Connections JDBC                      Requêtes/s




                           Temps                              Temps




                                                                          9
Monday, April 23, 12
Le flagrant délit
                       Connections JDBC                      Requêtes/s




                            Temps                             Temps

                         Threads actifs




                            Temps



                                                                          9
Monday, April 23, 12
Le flagrant délit
                       Connections JDBC                               Requêtes/s




                            Temps                                      Temps

                         Threads actifs                Requêtes en attente (Executor Queue Size)




                            Temps                                      Temps



                                                                                                   9
Monday, April 23, 12
l’explication
                                    Heap
Taille en MB




                          1 heure




                                                           10
   Monday, April 23, 12
l’explication
                                    Heap




                             On manque de recul: zoom arrière!
Taille en MB




                          1 heure




                                                                 10
   Monday, April 23, 12
l’explication
                                      Heap
Taille en MB




                          24 heures




                                                             11
   Monday, April 23, 12
l’explication
                                      Heap
Taille en MB




                          24 heures




                                                             11
   Monday, April 23, 12
l’explication
                                      Heap
Taille en MB




                          24 heures




                                                             11
   Monday, April 23, 12
l’explication
                                    Heap                   % de temps passé en GC

                                                100



                                                 75
Taille en MB




                                                 50



                                                 25



                                                  0
                          1 heure                                       1 heure




                                                                                    12
   Monday, April 23, 12
The usual suspects...




                                               13
Monday, April 23, 12
The usual suspects...



                  •    OutOfMemory Heap




                                                              13
Monday, April 23, 12
The usual suspects...



                  •    OutOfMemory Heap

                  •    OutOfMemory PermGen




                                                              13
Monday, April 23, 12
The usual suspects...



                  •    OutOfMemory Heap

                  •    OutOfMemory PermGen

                  •    Longues pauses de la JVM




                                                                  13
Monday, April 23, 12
The usual suspects...



                  •     OutOfMemory Heap

                  •     OutOfMemory PermGen

                  •     Longues pauses de la JVM

                       ➡ Sous forte charge = plantage assuré

                                                                   13
Monday, April 23, 12
The usual suspects...



                  •     OutOfMemory Heap

                  •     OutOfMemory PermGen

                  •     Longues pauses de la JVM

                       ➡ Sous forte charge = plantage assuré

                                                                   13
Monday, April 23, 12
The usual suspects...



                  •     OutOfMemory Heap

                  •     OutOfMemory PermGen

                  •     Longues pauses de la JVM

                       ➡ Sous forte charge = plantage assuré

                                                                   13
Monday, April 23, 12
G  C m ’a   The usual suspects...



                  •
                  •           e r!!
                             l e
                        OutOfMemory Heap

                        OutOfMemory PermGen

                  •



Monday, April 23, 12
                               t u
                        Longues pauses de la JVM

                       ➡ Sous forte charge = plantage assuré

                                                                   13
Mais ça sert à quoi alors le GC?


              “Many concurrent algorithms are very easy to
              write with a GC and totally hard (to down right
              impossible) using explicit free.”
                        Cliff Click




                                                                   14
Monday, April 23, 12
OK, donc il suffit de régler quelques options...




                                                                         15
Monday, April 23, 12
OK, donc il suffit de régler quelques options...




                                                        664 options....




Source: Oracle JVM 1.6.0_31 x86_64 server
                                                                          15
Monday, April 23, 12
16
Monday, April 23, 12
16
Monday, April 23, 12
La mémoire dans la JVM


                                 JVM




                                                17
Monday, April 23, 12
Metadata de classes,
                       Permanent (PermGen)   Strings internées, etc.




                              JVM




                                                                       18
Monday, April 23, 12
Metadata de classes,
                       Permanent (PermGen)   Strings internées, etc.




                              Heap           Les objets




                                                                       19
Monday, April 23, 12
Permanent (PermGen)


                          Old / Tenured



                           Young / New


                                             20
Monday, April 23, 12
Permanent (PermGen)


                          Old / Tenured



                           Eden      S0 S1


                                             21
Monday, April 23, 12
Approche générationelle du GC

                                                          r0               r1
                                                     v ivo            v ivo
                                 en             ur               ur
                               Ed             S                S




                                      Old


                                                                                22
Monday, April 23, 12
r0               r1
                                                        v ivo            v ivo
                                      en           ur               ur
                                    Ed           S                S


                       Allocation




                                           Old


                                                                                   23
Monday, April 23, 12
r0               r1
                                           v ivo            v ivo
                         en           ur               ur
                       Ed           S                S




                              Old


                                                                      24
Monday, April 23, 12
r0               r1
                                                 v ivo            v ivo
                              en            ur               ur
                            Ed            S                S


                       100% = GC!




                                    Old


                                                                            25
Monday, April 23, 12
r0               r1
                                                        v ivo            v ivo
                                en                 ur               ur
                              Ed                 S                S




                       Mort          Référencé



                                          Old


                                                                                   26
Monday, April 23, 12
r0               r1
                                             v ivo            v ivo
                         en             ur               ur
                       Ed             S                S




                        Copie



                                Old


                                                                        27
Monday, April 23, 12
r0               r1
                                                       v ivo            v ivo
                                 en               ur               ur
                               Ed               S                S


                       Remise à zéro...




                                          Old


                                                                                  28
Monday, April 23, 12
r0               r1
                                                        v ivo            v ivo
                                      en           ur               ur
                                    Ed           S                S


                       Allocation




                                           Old


                                                                                   29
Monday, April 23, 12
r0               r1
                                                  v ivo            v ivo
                              en             ur               ur
                            Ed             S                S


                       100% = GC !




                                     Old


                                                                             30
Monday, April 23, 12
r0               r1
                                           v ivo            v ivo
                         en           ur               ur
                       Ed           S                S




                              Old


                                                                      31
Monday, April 23, 12
r0               r1
                                             v ivo            v ivo
                         en             ur               ur
                       Ed             S                S




                        Copie



                                Old


                                                                        32
Monday, April 23, 12
r0               r1
                                           v ivo            v ivo
                         en           ur               ur
                       Ed           S                S




                                               Copie



                              Old


                                                                      33
Monday, April 23, 12
r0               r1
                                                v ivo            v ivo
                         en                ur               ur
                       Ed                S                S


                                Remise à zéro

                                        Génération 1

                                                  Génération 2



                              Old


                                                                           34
Monday, April 23, 12
r0               r1
                                                        v ivo            v ivo
                                      en           ur               ur
                                    Ed           S                S


                       Allocation




                                           Old


                                                                                   35
Monday, April 23, 12
r0               r1
                                                  v ivo            v ivo
                              en             ur               ur
                            Ed             S                S


                       100% = GC !




                                     Old


                                                                             36
Monday, April 23, 12
r0               r1
                                             v ivo            v ivo
                         en             ur               ur
                       Ed             S                S




                        Copie



                                Old


                                                                        37
Monday, April 23, 12
r0               r1
                                                v ivo            v ivo
                         en                ur               ur
                       Ed                S                S




                       Promotion



                                   Old


                                                                           38
Monday, April 23, 12
Old




                             39
Monday, April 23, 12
“Assez plein” =Old !
                                      GC




                                              40
Monday, April 23, 12
41
Monday, April 23, 12
42
Monday, April 23, 12
Old

                   Compaction
                   (optionnelle)




                                         43
Monday, April 23, 12
44
Monday, April 23, 12
Garbage Collectors
                  • Générationnels
                  • Stop the world!
                  • Throughput ou Concurrent


                                                 45
Monday, April 23, 12
Combinaisons de GCs
                                                   Young
                                          Serial           Parallel

                               Serial

                       Old    Parallel

                             Concurrent




                                                                      46
Monday, April 23, 12
Combinaisons de GCs
                                                   Young
                                          Serial           Parallel

                               Serial                  Par défaut

                       Old    Parallel    N/A

                             Concurrent




                                                                      47
Monday, April 23, 12
Combinaisons de GCs
                                                   Young
                                          Serial           Parallel

                               Serial

                       Old    Parallel

                             Concurrent




                                                                      48
Monday, April 23, 12
Combinaisons de GCs
                                                   Young
                                          Serial           Parallel

                               Serial     Serial

                       Old    Parallel

                             Concurrent




                                                                      48
Monday, April 23, 12
Combinaisons de GCs
                                                   Young
                                          Serial           Parallel

                               Serial     Serial           Parallel

                       Old    Parallel

                             Concurrent




                                                                      48
Monday, April 23, 12
Combinaisons de GCs
                                                   Young
                                          Serial           Parallel

                               Serial     Serial           Parallel

                       Old    Parallel                 ParallelOld

                             Concurrent




                                                                      48
Monday, April 23, 12
Combinaisons de GCs
                                                   Young
                                          Serial           Parallel

                               Serial     Serial           Parallel

                       Old    Parallel                 ParallelOld

                             Concurrent                     CMS




                                                                      48
Monday, April 23, 12
Combinaisons de GCs
                                                     Young
                                            Serial           Parallel

                               Serial       Serial           Parallel

                       Old    Parallel                   ParallelOld

                             Concurrent   CMS Serial          CMS




                                                                        48
Monday, April 23, 12
Combinaisons de GCs
                                                                  Young
                                                         Serial           Parallel

                                        Serial           Serial           Parallel

                            Old        Parallel                        ParallelOld

                                     Concurrent       CMS Serial           CMS

                       Les implémentations de Parallel diffèrent suivant les combinaisons


                                                                                            49
Monday, April 23, 12
Comparatif des GCs




                                            50
Monday, April 23, 12
Comparatif des GCs




                                            50
Monday, April 23, 12
CMS est le bon compromis
                            Serial                                                      917

                          Parallel                                               852

                       ParallelOld                                               846

                             CMS                                                  871

                       CMS Serial                                                        937

                                     0   250                  500          750                 1000
                                               Durée moyenne du test (s)




                                                                                                      51
Monday, April 23, 12
Les outils: CLI

                                          jps, jhat, jmap, jstack, jstat

                  $ jstat -gcutil PID
                    S0     S1     E      O       P      YGC      YGCT      FGC   FGCT      GCT
                    0.00 40.88 58.41    18.34   66.65   2729   316.538      46   6.820   323.358




                                                                                                   52
Monday, April 23, 12
Les outils: GUIs




                                          53
Monday, April 23, 12
Les outils: GUIs (2)
                  • Un profiler
                   • Pendant le dev
                   • Pour les autopsies!


                                                     54
Monday, April 23, 12
Les outils: GUIs (2)
                  • Un profiler
                   • Pendant le dev
                   • Pour les autopsies!
                                           HeapDumpOnOutOfMemoryError
                                                  HeapDumpPath




                                                                        54
Monday, April 23, 12
verbose:gc




                                    55
Monday, April 23, 12
verbose:gc




                                    55
Monday, April 23, 12
verbose:gc




                                    55
Monday, April 23, 12
verbose:gc




                                    55
Monday, April 23, 12
verbose:gc




                                    55
Monday, April 23, 12
verbose:gc




                                    55
Monday, April 23, 12
verbose:gc




                                    55
Monday, April 23, 12
verbose:gc


                          Stop the world!




                                            55
Monday, April 23, 12
verbose:gc


                          Stop the world!




                                            55
Monday, April 23, 12
MBeans




                                56
Monday, April 23, 12
OK, donc on sait mesurer... la température!




                                                                     57
Monday, April 23, 12
OK, donc on sait mesurer... la température !




                                                  =



                                                                      58
Monday, April 23, 12
Problème : on ne peut pas faire un diagnostic avec une simple mesure...




                                                            Il faut historiser pour constituer un
                                                                          référentiel !




Credit: http://www.lhup.edu/mkhalequ/fieldtrip/geos253.htm
                                                                                                    59
Monday, April 23, 12
Donc il faut persister les mesures !



                  •    JMX + jmxtrans

                  •    RRD

                  •    Graphite

                  •    etc.



                                                                         60
Monday, April 23, 12
On peut modifier les réglages...




Credit: http://www.our-energy.com
                                                                      61
Monday, April 23, 12
... si on sait mesurer/isoler les effets des réglages


                                      Situation “avant”
                         cputime




                                                          Effet visible du tuning




                                                                                    62
Monday, April 23, 12
Application et Résultats



                                                  63
Monday, April 23, 12
Minimiser la fréquence et la durée
                               des pauses de GC

                                 Young (ParNew)
                        Old (CMS-initial-mark + CMS-remark)




                                                              64
Monday, April 23, 12
vs.




                             65
Monday, April 23, 12
JVM
                                   Tomcat


                       vs.
                                        Application
                                          (code)




                                                      65
Monday, April 23, 12
1.                                          Le code

                  •    Le tuning de JVM ne peut pas compenser du code de mauvaise qualité

                  •    Des règles peuvent aider

                       •   Privilégier les données immutables et donc réutilisables sans risque

                       •   Sortir les invariants, notamment les instanciations, et surtout dans les boucles

                       •   Connaitre les caractéristiques des structures de données des frameworks
                           (java.util, Guava, Hibernate, etc.)

                           •   Attention au rapport poids de la structure / poids des données

                                                                                                              66
Monday, April 23, 12
Exemple : HashMap

                       HashMap 48

                               Entry[16] 80                key

                                              Entry   32


                                                           value



                                                                   67
Monday, April 23, 12
Exemple : HashMap

                                 HashMap 48

                                           Entry[16] 80                key

                       Overhead = 160 Bytes!              Entry   32


                                                                       value



                                                                               67
Monday, April 23, 12
Exemple : HashMap

                                       HashMap 48

                                                        Entry[16] 80                key

                       Overhead = 160 Bytes!                           Entry   32


                                                                                    value
                        •SingletonMap (40 Bytes)
                        •initialCapacity + loadFactor

                                                                                            67
Monday, April 23, 12
GC Young / s   Réduire les allocations...




                                                        68
Monday, April 23, 12
Charge CPU   ... impacte la CPU




                                              69
Monday, April 23, 12
2.                                              Tomcat

                  •        Se méfier du pooling

                       •    Les tags: enablePooling dans web/webdefault.xml

                       •    -Dorg.apache.jasper.runtime.JspFactoryImpl.USE_POOL=false

                  •        Attention aux buffers et à leur réutilisation

                       •    -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true

                  • Le nombre de JSP impacte les besoins en PermGen
                  • Faire des tests et mesurer les impacts!
                                                                                            70
Monday, April 23, 12
3. Heap Size   La JVM




                                Time
                  Heap Size




                                Time


                                       71
Monday, April 23, 12
3.             La JVM

                                       pause > 1s !
                  Heap Size




                                Time
                  Heap Size




                                Time


                                                      71
Monday, April 23, 12
3.                  La JVM

                                              pause > 1s !
                  Heap Size




                                      Time
                  Heap Size




                              GC très fréquents


                                       Time


                                                             71
Monday, April 23, 12
La heap



                        Heap




                                 72
Monday, April 23, 12
La heap



                        Heap
                                 -Xms : taille au démarrage
                                    -Xmx : taille max




                                                              72
Monday, April 23, 12
Young vs Old



                           Old




                          Young


                                      73
Monday, April 23, 12
Young vs Old



                           Old


                                      -XX:NewSize -XX:MaxNewSize
                                            -XX:NewRatio
                          Young


                                                                   73
Monday, April 23, 12
Young vs Old



                                      •“Working Set”
                           Old        •Caches, Pools d’objets
                                      •HttpSession, objets de durée de
                                      vie intermédiaire




                          Young       Objets < RequestScope




                                                                         73
Monday, April 23, 12
Young trop petite:



                              Old




                             Young


                                            74
Monday, April 23, 12
Young trop petite:



                              Old

                                            Young se remplit très vite = Beaucoup de
                                                           GC Young

                                             Promotion excessive d’objets en Old =
                             Young                  Beaucoup de GC Old




                                                                                       74
Monday, April 23, 12
Young trop grande:



                              Old




                             Young


                                            75
Monday, April 23, 12
Young trop grande:



                              Old
                                            Pauses de GC Young plus
                                                    longues



                             Young


                                                                      75
Monday, April 23, 12
Réglage de Young




                             Old


                                           NewRatio=8 pour -server sur Intel
                                                           =
                                          Trop peu de Young pour une webapp
                            Young                  avec de la charge!




                                                                               76
Monday, April 23, 12
Réglage de Young




                             Old

                                          On augmente Young progressivement
                                                en mesurant les effets!


                            Young


                                                                              76
Monday, April 23, 12
Old: attention à la fragmentation!




                                      Old




                                     Young


                                                            77
Monday, April 23, 12
Old: attention à la fragmentation!



                                     K6 < u22:      on failed)
                            JD Old             omoti
                                     15595) (pr
                          ure size =
                      fail
           (promotion
    ParNew
                                     Young


                                                             77
Monday, April 23, 12
Old generation : évolution idéale




                                                           78
Monday, April 23, 12
Old generation : évolution réelle




                                                           79
Monday, April 23, 12
Old generation : évolutions comparées




                                                               80
Monday, April 23, 12
Old generation : évolutions comparées




                                    Accélérations


                                                               80
Monday, April 23, 12
Contraintes supplémentaires


                  •    Prise en compte des variations irrégulières

                  •    Augmentation de trafic => augmentation de la pression mémoire

                  •    Pour bien fonctionner, CMS doit avoir de la marge

                       •   Plusieurs phases successives, la plupart concurrentes avec l’application
                           => le remplissage continue en même temps



                                                                                                      81
Monday, April 23, 12
Contraintes supplémentaires


                  •    Prise en compte des variations irrégulières

                  •    Augmentation de trafic => augmentation de la pression mémoire

                  •    Pour bien fonctionner, CMS doit avoir de la marge

                       •   Plusieurs phases successives, la plupart concurrentes avec l’application
                           => le remplissage continue en même temps
                           (concurrent mode failure): 2165740K->1284261K(2228224K), 8.9411250 secs



                                                                                                      81
Monday, April 23, 12
Marge de manoeuvre



                              Old




                             Young


                                            82
Monday, April 23, 12
Marge de manoeuvre

                                        CMSInitiatingOccupancyFraction = 92%
                                        par défaut



                              Old




                             Young


                                                                               82
Monday, April 23, 12
Marge de manoeuvre
                                            75-80% pour plus de marge

                                        UseCMSInitiatingOccupancyOnly pour
                                        forcer le déclenchement uniquement
                                        sur ce critère!
                              Old




                             Young


                                                                             82
Monday, April 23, 12
CMS initial-mark




                                          83
Monday, April 23, 12
CMS initial-mark (cumulé)




                                                   84
Monday, April 23, 12
CMS initial-mark (cumulé)



                        Mediane: -83%




                                                   84
Monday, April 23, 12
CMS initial-mark (cumulé)
                           Top 99%: -79%



                        Mediane: -83%




                                                   84
Monday, April 23, 12
CMS remark




                                    85
Monday, April 23, 12
CMS remark (cumulé)




                                             86
Monday, April 23, 12
CMS remark (cumulé)

                                     Top 90%: -56%




                                                     86
Monday, April 23, 12
Il reste des pauses !


                  •    RMI (donc JMX) provoque des GC explicites à intervalles réguliers

                       •   Appels à System.gc()

                  •    GC explicite = Full GC (Serial) = pause de 4s !

                       •   DisableExplicitGC + CMSClassUnloadingEnabled

                       •   ExplicitGCInvokesConcurrentAndUnloadsClasses


                                                                                           87
Monday, April 23, 12
Comparatif complet des GC




                                                   88
Monday, April 23, 12
89
Monday, April 23, 12
89
Monday, April 23, 12
Et après?

                  •        Tuning des Survivors

                       •    Taille, ratio de survivants, age maximum

                  •        G1

                       •    Principes et options complétement différents

                  • Autres JDKs : JRockit, Azul, IBM
                  • Vérifier les réglages à chaque changement applicatif
                  • Mesurer, mesurer, mesurer!
                                                                           90
Monday, April 23, 12
Questions ?



                                     91
Monday, April 23, 12

Contenu connexe

Similaire à OOM m'a tuer - Devoxx France 2012

Présentation de Apache Zookeeper
Présentation de Apache ZookeeperPrésentation de Apache Zookeeper
Présentation de Apache ZookeeperMichaël Morello
 
Tout sur les solutions de Haute Disponibilité et Disaster Recovery de SQL Ser...
Tout sur les solutions de Haute Disponibilité et Disaster Recovery de SQL Ser...Tout sur les solutions de Haute Disponibilité et Disaster Recovery de SQL Ser...
Tout sur les solutions de Haute Disponibilité et Disaster Recovery de SQL Ser...Microsoft Technet France
 
DataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysDataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysVictor Coustenoble
 
2011 02-07-html5-security-v1
2011 02-07-html5-security-v12011 02-07-html5-security-v1
2011 02-07-html5-security-v1Sébastien GIORIA
 
Programmation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et ReactorProgrammation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et ReactorFlorian Beaufumé
 
2018.11.15 Lyon JUG Maven 3&5 et java 9
2018.11.15 Lyon JUG Maven 3&5 et java 92018.11.15 Lyon JUG Maven 3&5 et java 9
2018.11.15 Lyon JUG Maven 3&5 et java 9Hervé Boutemy
 
Programmation concurrente en Java
Programmation concurrente en JavaProgrammation concurrente en Java
Programmation concurrente en JavaFlorian Beaufumé
 
201806 Paris JUG Maven 3&5 et Java 9
201806 Paris JUG Maven 3&5 et Java 9201806 Paris JUG Maven 3&5 et Java 9
201806 Paris JUG Maven 3&5 et Java 9Hervé Boutemy
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Antoine Rey
 
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!bleporini
 
Introduction nosql
Introduction nosqlIntroduction nosql
Introduction nosqlInes Slimene
 
Amina 2010 workshop slides final version
Amina 2010 workshop slides final versionAmina 2010 workshop slides final version
Amina 2010 workshop slides final versionRMwebsite
 
Run java vs ruby
Run java vs rubyRun java vs ruby
Run java vs rubypinguin666
 
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOlivier DASINI
 
Retour expérience détection fraude temps réel
Retour expérience détection fraude temps réelRetour expérience détection fraude temps réel
Retour expérience détection fraude temps réelMartin Menestret
 
Code d'Armor : Cloud Computing PAAS
Code d'Armor : Cloud Computing PAASCode d'Armor : Cloud Computing PAAS
Code d'Armor : Cloud Computing PAASsliard
 
Architectures réparties en environnement web
Architectures réparties en environnement webArchitectures réparties en environnement web
Architectures réparties en environnement webAmaury Bouchard
 
Réplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden GateRéplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden GateMor THIAM
 
Hibernate vs le Cloud computing
Hibernate vs le Cloud computingHibernate vs le Cloud computing
Hibernate vs le Cloud computingJulien Dubois
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computingNormandy JUG
 

Similaire à OOM m'a tuer - Devoxx France 2012 (20)

Présentation de Apache Zookeeper
Présentation de Apache ZookeeperPrésentation de Apache Zookeeper
Présentation de Apache Zookeeper
 
Tout sur les solutions de Haute Disponibilité et Disaster Recovery de SQL Ser...
Tout sur les solutions de Haute Disponibilité et Disaster Recovery de SQL Ser...Tout sur les solutions de Haute Disponibilité et Disaster Recovery de SQL Ser...
Tout sur les solutions de Haute Disponibilité et Disaster Recovery de SQL Ser...
 
DataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysDataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft Techdays
 
2011 02-07-html5-security-v1
2011 02-07-html5-security-v12011 02-07-html5-security-v1
2011 02-07-html5-security-v1
 
Programmation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et ReactorProgrammation réactive avec Spring 5 et Reactor
Programmation réactive avec Spring 5 et Reactor
 
2018.11.15 Lyon JUG Maven 3&5 et java 9
2018.11.15 Lyon JUG Maven 3&5 et java 92018.11.15 Lyon JUG Maven 3&5 et java 9
2018.11.15 Lyon JUG Maven 3&5 et java 9
 
Programmation concurrente en Java
Programmation concurrente en JavaProgrammation concurrente en Java
Programmation concurrente en Java
 
201806 Paris JUG Maven 3&5 et Java 9
201806 Paris JUG Maven 3&5 et Java 9201806 Paris JUG Maven 3&5 et Java 9
201806 Paris JUG Maven 3&5 et Java 9
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
 
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!
 
Introduction nosql
Introduction nosqlIntroduction nosql
Introduction nosql
 
Amina 2010 workshop slides final version
Amina 2010 workshop slides final versionAmina 2010 workshop slides final version
Amina 2010 workshop slides final version
 
Run java vs ruby
Run java vs rubyRun java vs ruby
Run java vs ruby
 
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
 
Retour expérience détection fraude temps réel
Retour expérience détection fraude temps réelRetour expérience détection fraude temps réel
Retour expérience détection fraude temps réel
 
Code d'Armor : Cloud Computing PAAS
Code d'Armor : Cloud Computing PAASCode d'Armor : Cloud Computing PAAS
Code d'Armor : Cloud Computing PAAS
 
Architectures réparties en environnement web
Architectures réparties en environnement webArchitectures réparties en environnement web
Architectures réparties en environnement web
 
Réplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden GateRéplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden Gate
 
Hibernate vs le Cloud computing
Hibernate vs le Cloud computingHibernate vs le Cloud computing
Hibernate vs le Cloud computing
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computing
 

Plus de ekino

Spring data : Une api, quinze possibilités - Julien Roy
Spring data : Une api, quinze possibilités - Julien RoySpring data : Une api, quinze possibilités - Julien Roy
Spring data : Une api, quinze possibilités - Julien Royekino
 
Panorama des solutions mobile hybrides
Panorama des solutions mobile hybridesPanorama des solutions mobile hybrides
Panorama des solutions mobile hybridesekino
 
Le « RUN » (ou la Tierce Maintenance Applicative)
Le « RUN » (ou la Tierce Maintenance Applicative)Le « RUN » (ou la Tierce Maintenance Applicative)
Le « RUN » (ou la Tierce Maintenance Applicative)ekino
 
Kinect pour les développeurs Web
Kinect pour les développeurs WebKinect pour les développeurs Web
Kinect pour les développeurs Webekino
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+ekino
 
Symfony et Sonata Project chez Canal+
Symfony et Sonata Project chez Canal+ Symfony et Sonata Project chez Canal+
Symfony et Sonata Project chez Canal+ ekino
 
Expériencer les objets connectés
Expériencer les objets connectésExpériencer les objets connectés
Expériencer les objets connectésekino
 
Industrialise PHP ~ ZendCon Europe 2013
Industrialise PHP ~ ZendCon Europe 2013Industrialise PHP ~ ZendCon Europe 2013
Industrialise PHP ~ ZendCon Europe 2013ekino
 
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?ekino
 
Responsive Web Design - Enjeux, Solutions, Méthodologie
Responsive Web Design - Enjeux, Solutions, MéthodologieResponsive Web Design - Enjeux, Solutions, Méthodologie
Responsive Web Design - Enjeux, Solutions, Méthodologieekino
 
Java GC - Pause tuning
Java GC - Pause tuningJava GC - Pause tuning
Java GC - Pause tuningekino
 
SnapyX
SnapyXSnapyX
SnapyXekino
 
HTML5 vu par Ekino
HTML5 vu par EkinoHTML5 vu par Ekino
HTML5 vu par Ekinoekino
 

Plus de ekino (13)

Spring data : Une api, quinze possibilités - Julien Roy
Spring data : Une api, quinze possibilités - Julien RoySpring data : Une api, quinze possibilités - Julien Roy
Spring data : Une api, quinze possibilités - Julien Roy
 
Panorama des solutions mobile hybrides
Panorama des solutions mobile hybridesPanorama des solutions mobile hybrides
Panorama des solutions mobile hybrides
 
Le « RUN » (ou la Tierce Maintenance Applicative)
Le « RUN » (ou la Tierce Maintenance Applicative)Le « RUN » (ou la Tierce Maintenance Applicative)
Le « RUN » (ou la Tierce Maintenance Applicative)
 
Kinect pour les développeurs Web
Kinect pour les développeurs WebKinect pour les développeurs Web
Kinect pour les développeurs Web
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
 
Symfony et Sonata Project chez Canal+
Symfony et Sonata Project chez Canal+ Symfony et Sonata Project chez Canal+
Symfony et Sonata Project chez Canal+
 
Expériencer les objets connectés
Expériencer les objets connectésExpériencer les objets connectés
Expériencer les objets connectés
 
Industrialise PHP ~ ZendCon Europe 2013
Industrialise PHP ~ ZendCon Europe 2013Industrialise PHP ~ ZendCon Europe 2013
Industrialise PHP ~ ZendCon Europe 2013
 
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
Drupagora 2013 : Drupal8 et Symfony2, quel impact ?
 
Responsive Web Design - Enjeux, Solutions, Méthodologie
Responsive Web Design - Enjeux, Solutions, MéthodologieResponsive Web Design - Enjeux, Solutions, Méthodologie
Responsive Web Design - Enjeux, Solutions, Méthodologie
 
Java GC - Pause tuning
Java GC - Pause tuningJava GC - Pause tuning
Java GC - Pause tuning
 
SnapyX
SnapyXSnapyX
SnapyX
 
HTML5 vu par Ekino
HTML5 vu par EkinoHTML5 vu par Ekino
HTML5 vu par Ekino
 

OOM m'a tuer - Devoxx France 2012

  • 1. OOM m’a tuer Renaud Bruyeron @brew_your_own Frank Pavageau @fpavageau 1 Monday, April 23, 12
  • 2. Agenda 1. La scène du crime 2. La gestion de la mémoire dans la JVM: les bases, les outils 3. Application 2 Monday, April 23, 12
  • 3. Renaud Bruyeron @brew_your_own CTO d’ • Débuts au • C -> Perl -> PHP -> Java 3 Monday, April 23, 12
  • 4. Renaud Bruyeron @brew_your_own CTO d’ • Débuts au • C -> Perl -> PHP -> Java 3 Monday, April 23, 12
  • 5. Frank Pavageau @fpavageau Architecte Senior • C++ -> PHP -> Java • Systèmes et devops • Tech Lead socle eCommerce 4 Monday, April 23, 12
  • 6. Frank Pavageau @fpavageau Architecte Senior • C++ -> PHP -> Java • Systèmes et devops • Tech Lead socle eCommerce 4 Monday, April 23, 12
  • 7. Une Plateforme web e-commerce B2C Apache Tomcat Oracle 5 Monday, April 23, 12
  • 8. Une Plateforme web e-commerce B2C Apache •12+ Serveurs Tomcat •10 Webapps différentes •50+ JVMs Oracle (JDK6) Oracle 5 Monday, April 23, 12
  • 9. Une Plateforme web e-commerce B2C Apache •12+ Serveurs Tomcat •10 Webapps différentes •50+ JVMs Oracle (JDK6) •> 30000 sessions •250-400 Req/s Oracle •Variance très importante du trafic 5 Monday, April 23, 12
  • 10. ... une victime un peu atypique... Modélisation du catalogue sous forme de Graphe Implémentation custom du moteur de catalogue 100% sur la Heap (pas de BDD) Mise à jour par AtomicReference.set() 6 Monday, April 23, 12
  • 11. ... une victime un peu atypique... Modélisation du catalogue sous forme de Graphe Implémentation custom du moteur de catalogue 100% sur la Heap (pas de BDD) Mise à jour par AtomicReference.set() Impossible de “cacher” aggressivement Beaucoup d’objets créés à chaque Request Raccordements SI = latence = concurrence élevée 6 Monday, April 23, 12
  • 12. vs. Débit Latence 7 Monday, April 23, 12
  • 14. Application interactive: Il faut privilégier les temps de réponse! 8 Monday, April 23, 12
  • 15. Le flagrant délit Connections JDBC Temps 9 Monday, April 23, 12
  • 16. Le flagrant délit Connections JDBC Requêtes/s Temps Temps 9 Monday, April 23, 12
  • 17. Le flagrant délit Connections JDBC Requêtes/s Temps Temps Threads actifs Temps 9 Monday, April 23, 12
  • 18. Le flagrant délit Connections JDBC Requêtes/s Temps Temps Threads actifs Requêtes en attente (Executor Queue Size) Temps Temps 9 Monday, April 23, 12
  • 19. l’explication Heap Taille en MB 1 heure 10 Monday, April 23, 12
  • 20. l’explication Heap On manque de recul: zoom arrière! Taille en MB 1 heure 10 Monday, April 23, 12
  • 21. l’explication Heap Taille en MB 24 heures 11 Monday, April 23, 12
  • 22. l’explication Heap Taille en MB 24 heures 11 Monday, April 23, 12
  • 23. l’explication Heap Taille en MB 24 heures 11 Monday, April 23, 12
  • 24. l’explication Heap % de temps passé en GC 100 75 Taille en MB 50 25 0 1 heure 1 heure 12 Monday, April 23, 12
  • 25. The usual suspects... 13 Monday, April 23, 12
  • 26. The usual suspects... • OutOfMemory Heap 13 Monday, April 23, 12
  • 27. The usual suspects... • OutOfMemory Heap • OutOfMemory PermGen 13 Monday, April 23, 12
  • 28. The usual suspects... • OutOfMemory Heap • OutOfMemory PermGen • Longues pauses de la JVM 13 Monday, April 23, 12
  • 29. The usual suspects... • OutOfMemory Heap • OutOfMemory PermGen • Longues pauses de la JVM ➡ Sous forte charge = plantage assuré 13 Monday, April 23, 12
  • 30. The usual suspects... • OutOfMemory Heap • OutOfMemory PermGen • Longues pauses de la JVM ➡ Sous forte charge = plantage assuré 13 Monday, April 23, 12
  • 31. The usual suspects... • OutOfMemory Heap • OutOfMemory PermGen • Longues pauses de la JVM ➡ Sous forte charge = plantage assuré 13 Monday, April 23, 12
  • 32. G C m ’a The usual suspects... • • e r!! l e OutOfMemory Heap OutOfMemory PermGen • Monday, April 23, 12 t u Longues pauses de la JVM ➡ Sous forte charge = plantage assuré 13
  • 33. Mais ça sert à quoi alors le GC? “Many concurrent algorithms are very easy to write with a GC and totally hard (to down right impossible) using explicit free.” Cliff Click 14 Monday, April 23, 12
  • 34. OK, donc il suffit de régler quelques options... 15 Monday, April 23, 12
  • 35. OK, donc il suffit de régler quelques options... 664 options.... Source: Oracle JVM 1.6.0_31 x86_64 server 15 Monday, April 23, 12
  • 38. La mémoire dans la JVM JVM 17 Monday, April 23, 12
  • 39. Metadata de classes, Permanent (PermGen) Strings internées, etc. JVM 18 Monday, April 23, 12
  • 40. Metadata de classes, Permanent (PermGen) Strings internées, etc. Heap Les objets 19 Monday, April 23, 12
  • 41. Permanent (PermGen) Old / Tenured Young / New 20 Monday, April 23, 12
  • 42. Permanent (PermGen) Old / Tenured Eden S0 S1 21 Monday, April 23, 12
  • 43. Approche générationelle du GC r0 r1 v ivo v ivo en ur ur Ed S S Old 22 Monday, April 23, 12
  • 44. r0 r1 v ivo v ivo en ur ur Ed S S Allocation Old 23 Monday, April 23, 12
  • 45. r0 r1 v ivo v ivo en ur ur Ed S S Old 24 Monday, April 23, 12
  • 46. r0 r1 v ivo v ivo en ur ur Ed S S 100% = GC! Old 25 Monday, April 23, 12
  • 47. r0 r1 v ivo v ivo en ur ur Ed S S Mort Référencé Old 26 Monday, April 23, 12
  • 48. r0 r1 v ivo v ivo en ur ur Ed S S Copie Old 27 Monday, April 23, 12
  • 49. r0 r1 v ivo v ivo en ur ur Ed S S Remise à zéro... Old 28 Monday, April 23, 12
  • 50. r0 r1 v ivo v ivo en ur ur Ed S S Allocation Old 29 Monday, April 23, 12
  • 51. r0 r1 v ivo v ivo en ur ur Ed S S 100% = GC ! Old 30 Monday, April 23, 12
  • 52. r0 r1 v ivo v ivo en ur ur Ed S S Old 31 Monday, April 23, 12
  • 53. r0 r1 v ivo v ivo en ur ur Ed S S Copie Old 32 Monday, April 23, 12
  • 54. r0 r1 v ivo v ivo en ur ur Ed S S Copie Old 33 Monday, April 23, 12
  • 55. r0 r1 v ivo v ivo en ur ur Ed S S Remise à zéro Génération 1 Génération 2 Old 34 Monday, April 23, 12
  • 56. r0 r1 v ivo v ivo en ur ur Ed S S Allocation Old 35 Monday, April 23, 12
  • 57. r0 r1 v ivo v ivo en ur ur Ed S S 100% = GC ! Old 36 Monday, April 23, 12
  • 58. r0 r1 v ivo v ivo en ur ur Ed S S Copie Old 37 Monday, April 23, 12
  • 59. r0 r1 v ivo v ivo en ur ur Ed S S Promotion Old 38 Monday, April 23, 12
  • 60. Old 39 Monday, April 23, 12
  • 61. “Assez plein” =Old ! GC 40 Monday, April 23, 12
  • 64. Old Compaction (optionnelle) 43 Monday, April 23, 12
  • 66. Garbage Collectors • Générationnels • Stop the world! • Throughput ou Concurrent 45 Monday, April 23, 12
  • 67. Combinaisons de GCs Young Serial Parallel Serial Old Parallel Concurrent 46 Monday, April 23, 12
  • 68. Combinaisons de GCs Young Serial Parallel Serial Par défaut Old Parallel N/A Concurrent 47 Monday, April 23, 12
  • 69. Combinaisons de GCs Young Serial Parallel Serial Old Parallel Concurrent 48 Monday, April 23, 12
  • 70. Combinaisons de GCs Young Serial Parallel Serial Serial Old Parallel Concurrent 48 Monday, April 23, 12
  • 71. Combinaisons de GCs Young Serial Parallel Serial Serial Parallel Old Parallel Concurrent 48 Monday, April 23, 12
  • 72. Combinaisons de GCs Young Serial Parallel Serial Serial Parallel Old Parallel ParallelOld Concurrent 48 Monday, April 23, 12
  • 73. Combinaisons de GCs Young Serial Parallel Serial Serial Parallel Old Parallel ParallelOld Concurrent CMS 48 Monday, April 23, 12
  • 74. Combinaisons de GCs Young Serial Parallel Serial Serial Parallel Old Parallel ParallelOld Concurrent CMS Serial CMS 48 Monday, April 23, 12
  • 75. Combinaisons de GCs Young Serial Parallel Serial Serial Parallel Old Parallel ParallelOld Concurrent CMS Serial CMS Les implémentations de Parallel diffèrent suivant les combinaisons 49 Monday, April 23, 12
  • 76. Comparatif des GCs 50 Monday, April 23, 12
  • 77. Comparatif des GCs 50 Monday, April 23, 12
  • 78. CMS est le bon compromis Serial 917 Parallel 852 ParallelOld 846 CMS 871 CMS Serial 937 0 250 500 750 1000 Durée moyenne du test (s) 51 Monday, April 23, 12
  • 79. Les outils: CLI jps, jhat, jmap, jstack, jstat $ jstat -gcutil PID S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 40.88 58.41 18.34 66.65 2729 316.538 46 6.820 323.358 52 Monday, April 23, 12
  • 80. Les outils: GUIs 53 Monday, April 23, 12
  • 81. Les outils: GUIs (2) • Un profiler • Pendant le dev • Pour les autopsies! 54 Monday, April 23, 12
  • 82. Les outils: GUIs (2) • Un profiler • Pendant le dev • Pour les autopsies! HeapDumpOnOutOfMemoryError HeapDumpPath 54 Monday, April 23, 12
  • 83. verbose:gc 55 Monday, April 23, 12
  • 84. verbose:gc 55 Monday, April 23, 12
  • 85. verbose:gc 55 Monday, April 23, 12
  • 86. verbose:gc 55 Monday, April 23, 12
  • 87. verbose:gc 55 Monday, April 23, 12
  • 88. verbose:gc 55 Monday, April 23, 12
  • 89. verbose:gc 55 Monday, April 23, 12
  • 90. verbose:gc Stop the world! 55 Monday, April 23, 12
  • 91. verbose:gc Stop the world! 55 Monday, April 23, 12
  • 92. MBeans 56 Monday, April 23, 12
  • 93. OK, donc on sait mesurer... la température! 57 Monday, April 23, 12
  • 94. OK, donc on sait mesurer... la température ! = 58 Monday, April 23, 12
  • 95. Problème : on ne peut pas faire un diagnostic avec une simple mesure... Il faut historiser pour constituer un référentiel ! Credit: http://www.lhup.edu/mkhalequ/fieldtrip/geos253.htm 59 Monday, April 23, 12
  • 96. Donc il faut persister les mesures ! • JMX + jmxtrans • RRD • Graphite • etc. 60 Monday, April 23, 12
  • 97. On peut modifier les réglages... Credit: http://www.our-energy.com 61 Monday, April 23, 12
  • 98. ... si on sait mesurer/isoler les effets des réglages Situation “avant” cputime Effet visible du tuning 62 Monday, April 23, 12
  • 99. Application et Résultats 63 Monday, April 23, 12
  • 100. Minimiser la fréquence et la durée des pauses de GC Young (ParNew) Old (CMS-initial-mark + CMS-remark) 64 Monday, April 23, 12
  • 101. vs. 65 Monday, April 23, 12
  • 102. JVM Tomcat vs. Application (code) 65 Monday, April 23, 12
  • 103. 1. Le code • Le tuning de JVM ne peut pas compenser du code de mauvaise qualité • Des règles peuvent aider • Privilégier les données immutables et donc réutilisables sans risque • Sortir les invariants, notamment les instanciations, et surtout dans les boucles • Connaitre les caractéristiques des structures de données des frameworks (java.util, Guava, Hibernate, etc.) • Attention au rapport poids de la structure / poids des données 66 Monday, April 23, 12
  • 104. Exemple : HashMap HashMap 48 Entry[16] 80 key Entry 32 value 67 Monday, April 23, 12
  • 105. Exemple : HashMap HashMap 48 Entry[16] 80 key Overhead = 160 Bytes! Entry 32 value 67 Monday, April 23, 12
  • 106. Exemple : HashMap HashMap 48 Entry[16] 80 key Overhead = 160 Bytes! Entry 32 value •SingletonMap (40 Bytes) •initialCapacity + loadFactor 67 Monday, April 23, 12
  • 107. GC Young / s Réduire les allocations... 68 Monday, April 23, 12
  • 108. Charge CPU ... impacte la CPU 69 Monday, April 23, 12
  • 109. 2. Tomcat • Se méfier du pooling • Les tags: enablePooling dans web/webdefault.xml • -Dorg.apache.jasper.runtime.JspFactoryImpl.USE_POOL=false • Attention aux buffers et à leur réutilisation • -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true • Le nombre de JSP impacte les besoins en PermGen • Faire des tests et mesurer les impacts! 70 Monday, April 23, 12
  • 110. 3. Heap Size La JVM Time Heap Size Time 71 Monday, April 23, 12
  • 111. 3. La JVM pause > 1s ! Heap Size Time Heap Size Time 71 Monday, April 23, 12
  • 112. 3. La JVM pause > 1s ! Heap Size Time Heap Size GC très fréquents Time 71 Monday, April 23, 12
  • 113. La heap Heap 72 Monday, April 23, 12
  • 114. La heap Heap -Xms : taille au démarrage -Xmx : taille max 72 Monday, April 23, 12
  • 115. Young vs Old Old Young 73 Monday, April 23, 12
  • 116. Young vs Old Old -XX:NewSize -XX:MaxNewSize -XX:NewRatio Young 73 Monday, April 23, 12
  • 117. Young vs Old •“Working Set” Old •Caches, Pools d’objets •HttpSession, objets de durée de vie intermédiaire Young Objets < RequestScope 73 Monday, April 23, 12
  • 118. Young trop petite: Old Young 74 Monday, April 23, 12
  • 119. Young trop petite: Old Young se remplit très vite = Beaucoup de GC Young Promotion excessive d’objets en Old = Young Beaucoup de GC Old 74 Monday, April 23, 12
  • 120. Young trop grande: Old Young 75 Monday, April 23, 12
  • 121. Young trop grande: Old Pauses de GC Young plus longues Young 75 Monday, April 23, 12
  • 122. Réglage de Young Old NewRatio=8 pour -server sur Intel = Trop peu de Young pour une webapp Young avec de la charge! 76 Monday, April 23, 12
  • 123. Réglage de Young Old On augmente Young progressivement en mesurant les effets! Young 76 Monday, April 23, 12
  • 124. Old: attention à la fragmentation! Old Young 77 Monday, April 23, 12
  • 125. Old: attention à la fragmentation! K6 < u22: on failed) JD Old omoti 15595) (pr ure size = fail (promotion ParNew Young 77 Monday, April 23, 12
  • 126. Old generation : évolution idéale 78 Monday, April 23, 12
  • 127. Old generation : évolution réelle 79 Monday, April 23, 12
  • 128. Old generation : évolutions comparées 80 Monday, April 23, 12
  • 129. Old generation : évolutions comparées Accélérations 80 Monday, April 23, 12
  • 130. Contraintes supplémentaires • Prise en compte des variations irrégulières • Augmentation de trafic => augmentation de la pression mémoire • Pour bien fonctionner, CMS doit avoir de la marge • Plusieurs phases successives, la plupart concurrentes avec l’application => le remplissage continue en même temps 81 Monday, April 23, 12
  • 131. Contraintes supplémentaires • Prise en compte des variations irrégulières • Augmentation de trafic => augmentation de la pression mémoire • Pour bien fonctionner, CMS doit avoir de la marge • Plusieurs phases successives, la plupart concurrentes avec l’application => le remplissage continue en même temps (concurrent mode failure): 2165740K->1284261K(2228224K), 8.9411250 secs 81 Monday, April 23, 12
  • 132. Marge de manoeuvre Old Young 82 Monday, April 23, 12
  • 133. Marge de manoeuvre CMSInitiatingOccupancyFraction = 92% par défaut Old Young 82 Monday, April 23, 12
  • 134. Marge de manoeuvre 75-80% pour plus de marge UseCMSInitiatingOccupancyOnly pour forcer le déclenchement uniquement sur ce critère! Old Young 82 Monday, April 23, 12
  • 135. CMS initial-mark 83 Monday, April 23, 12
  • 136. CMS initial-mark (cumulé) 84 Monday, April 23, 12
  • 137. CMS initial-mark (cumulé) Mediane: -83% 84 Monday, April 23, 12
  • 138. CMS initial-mark (cumulé) Top 99%: -79% Mediane: -83% 84 Monday, April 23, 12
  • 139. CMS remark 85 Monday, April 23, 12
  • 140. CMS remark (cumulé) 86 Monday, April 23, 12
  • 141. CMS remark (cumulé) Top 90%: -56% 86 Monday, April 23, 12
  • 142. Il reste des pauses ! • RMI (donc JMX) provoque des GC explicites à intervalles réguliers • Appels à System.gc() • GC explicite = Full GC (Serial) = pause de 4s ! • DisableExplicitGC + CMSClassUnloadingEnabled • ExplicitGCInvokesConcurrentAndUnloadsClasses 87 Monday, April 23, 12
  • 143. Comparatif complet des GC 88 Monday, April 23, 12
  • 146. Et après? • Tuning des Survivors • Taille, ratio de survivants, age maximum • G1 • Principes et options complétement différents • Autres JDKs : JRockit, Azul, IBM • Vérifier les réglages à chaque changement applicatif • Mesurer, mesurer, mesurer! 90 Monday, April 23, 12
  • 147. Questions ? 91 Monday, April 23, 12

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. pause sondage\n
  24. pause sondage\n
  25. pause sondage\n
  26. pause sondage\n
  27. pause sondage\n
  28. pause sondage\n
  29. pause sondage\n
  30. pause sondage\n
  31. pause sondage\n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. g&amp;#xE9;n&amp;#xE9;rations\n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. analogie avec le toubib\n
  102. sismographe?\n
  103. sondage\n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n
  144. \n
  145. \n
  146. \n
  147. \n
  148. \n
  149. \n
  150. \n
  151. \n
  152. \n
  153. \n
  154. \n
  155. \n
  156. \n
  157. \n
  158. \n
  159. \n
  160. \n
  161. \n
  162. \n
  163. \n
  164. \n
  165. \n
  166. \n
  167. \n
  168. \n
  169. \n