OOM m’a tuer    Renaud Bruyeron @brew_your_own                           Frank Pavageau @fpavageau                        ...
Agenda                  1. La scène du crime                  2. La gestion de la mémoire dans la JVM: les bases, les outi...
Renaud Bruyeron @brew_your_own                          CTO d’                  •    Débuts au                  •    C -> ...
Renaud Bruyeron @brew_your_own                          CTO d’                  •    Débuts au                  •    C -> ...
Frank Pavageau @fpavageau                            Architecte Senior                       •   C++ -> PHP -> Java       ...
Frank Pavageau @fpavageau                            Architecte Senior                       •   C++ -> PHP -> Java       ...
Une Plateforme web                        e-commerce B2C              Apache              Tomcat              Oracle      ...
Une Plateforme web                        e-commerce B2C              Apache                              •12+ Serveurs   ...
Une Plateforme web                        e-commerce B2C              Apache                              •12+ Serveurs   ...
... une victime un peu atypique...                                   Modélisation du catalogue sous forme de Graphe       ...
... une victime un peu atypique...                                   Modélisation du catalogue sous forme de Graphe       ...
vs.                       Débit         Latence                                               7Monday, April 23, 12
8Monday, April 23, 12
Application interactive:                        Il faut privilégier les                         temps de réponse!         ...
Le flagrant délit                       Connections JDBC                           Temps                                   ...
Le flagrant délit                       Connections JDBC                      Requêtes/s                           Temps   ...
Le flagrant délit                       Connections JDBC                      Requêtes/s                            Temps  ...
Le flagrant délit                       Connections JDBC                               Requêtes/s                          ...
l’explication                                    HeapTaille en MB                          1 heure                        ...
l’explication                                    Heap                             On manque de recul: zoom arrière!Taille ...
l’explication                                      HeapTaille en MB                          24 heures                    ...
l’explication                                      HeapTaille en MB                          24 heures                    ...
l’explication                                      HeapTaille en MB                          24 heures                    ...
l’explication                                    Heap                   % de temps passé en GC                            ...
The usual suspects...                                               13Monday, April 23, 12
The usual suspects...                  •    OutOfMemory Heap                                                              ...
The usual suspects...                  •    OutOfMemory Heap                  •    OutOfMemory PermGen                    ...
The usual suspects...                  •    OutOfMemory Heap                  •    OutOfMemory PermGen                  • ...
The usual suspects...                  •     OutOfMemory Heap                  •     OutOfMemory PermGen                  ...
The usual suspects...                  •     OutOfMemory Heap                  •     OutOfMemory PermGen                  ...
The usual suspects...                  •     OutOfMemory Heap                  •     OutOfMemory PermGen                  ...
G  C m ’a   The usual suspects...                  •                  •           e r!!                             l e   ...
Mais ça sert à quoi alors le GC?              “Many concurrent algorithms are very easy to              write with a GC an...
OK, donc il suffit de régler quelques options...                                                                         15...
OK, donc il suffit de régler quelques options...                                                        664 options....Sour...
16Monday, April 23, 12
16Monday, April 23, 12
La mémoire dans la JVM                                 JVM                                                17Monday, April ...
Metadata de classes,                       Permanent (PermGen)   Strings internées, etc.                              JVM ...
Metadata de classes,                       Permanent (PermGen)   Strings internées, etc.                              Heap...
Permanent (PermGen)                          Old / Tenured                           Young / New                          ...
Permanent (PermGen)                          Old / Tenured                           Eden      S0 S1                      ...
Approche générationelle du GC                                                          r0               r1                ...
r0               r1                                                        v ivo            v ivo                         ...
r0               r1                                           v ivo            v ivo                         en           ...
r0               r1                                                 v ivo            v ivo                              en...
r0               r1                                                        v ivo            v ivo                         ...
r0               r1                                             v ivo            v ivo                         en         ...
r0               r1                                                       v ivo            v ivo                          ...
r0               r1                                                        v ivo            v ivo                         ...
r0               r1                                                  v ivo            v ivo                              e...
r0               r1                                           v ivo            v ivo                         en           ...
r0               r1                                             v ivo            v ivo                         en         ...
r0               r1                                           v ivo            v ivo                         en           ...
r0               r1                                                v ivo            v ivo                         en      ...
r0               r1                                                        v ivo            v ivo                         ...
r0               r1                                                  v ivo            v ivo                              e...
r0               r1                                             v ivo            v ivo                         en         ...
r0               r1                                                v ivo            v ivo                         en      ...
Old                             39Monday, April 23, 12
“Assez plein” =Old !                                      GC                                              40Monday, April ...
41Monday, April 23, 12
42Monday, April 23, 12
Old                   Compaction                   (optionnelle)                                         43Monday, April 2...
44Monday, April 23, 12
Garbage Collectors                  • Générationnels                  • Stop the world!                  • Throughput ou C...
Combinaisons de GCs                                                   Young                                          Seria...
Combinaisons de GCs                                                   Young                                          Seria...
Combinaisons de GCs                                                   Young                                          Seria...
Combinaisons de GCs                                                   Young                                          Seria...
Combinaisons de GCs                                                   Young                                          Seria...
Combinaisons de GCs                                                   Young                                          Seria...
Combinaisons de GCs                                                   Young                                          Seria...
Combinaisons de GCs                                                     Young                                            S...
Combinaisons de GCs                                                                  Young                                ...
Comparatif des GCs                                            50Monday, April 23, 12
Comparatif des GCs                                            50Monday, April 23, 12
CMS est le bon compromis                            Serial                                                      917       ...
Les outils: CLI                                          jps, jhat, jmap, jstack, jstat                  $ jstat -gcutil P...
Les outils: GUIs                                          53Monday, April 23, 12
Les outils: GUIs (2)                  • Un profiler                   • Pendant le dev                   • Pour les autopsi...
Les outils: GUIs (2)                  • Un profiler                   • Pendant le dev                   • Pour les autopsi...
verbose:gc                                    55Monday, April 23, 12
verbose:gc                                    55Monday, April 23, 12
verbose:gc                                    55Monday, April 23, 12
verbose:gc                                    55Monday, April 23, 12
verbose:gc                                    55Monday, April 23, 12
verbose:gc                                    55Monday, April 23, 12
verbose:gc                                    55Monday, April 23, 12
verbose:gc                          Stop the world!                                            55Monday, April 23, 12
verbose:gc                          Stop the world!                                            55Monday, April 23, 12
MBeans                                56Monday, April 23, 12
OK, donc on sait mesurer... la température!                                                                     57Monday, ...
OK, donc on sait mesurer... la température !                                                  =                           ...
Problème : on ne peut pas faire un diagnostic avec une simple mesure...                                                   ...
Donc il faut persister les mesures !                  •    JMX + jmxtrans                  •    RRD                  •    ...
On peut modifier les réglages...Credit: http://www.our-energy.com                                                          ...
... si on sait mesurer/isoler les effets des réglages                                      Situation “avant”              ...
Application et Résultats                                                  63Monday, April 23, 12
Minimiser la fréquence et la durée                               des pauses de GC                                 Young (P...
vs.                             65Monday, April 23, 12
JVM                                   Tomcat                       vs.                                        Application ...
1.                                          Le code                  •    Le tuning de JVM ne peut pas compenser du code d...
Exemple : HashMap                       HashMap 48                               Entry[16] 80                key          ...
Exemple : HashMap                                 HashMap 48                                           Entry[16] 80       ...
Exemple : HashMap                                       HashMap 48                                                        ...
GC Young / s   Réduire les allocations...                                                        68Monday, April 23, 12
Charge CPU   ... impacte la CPU                                              69Monday, April 23, 12
2.                                              Tomcat                  •        Se méfier du pooling                      ...
3. Heap Size   La JVM                                Time                  Heap Size                                Time  ...
3.             La JVM                                       pause > 1s !                  Heap Size                       ...
3.                  La JVM                                              pause > 1s !                  Heap Size           ...
La heap                        Heap                                 72Monday, April 23, 12
La heap                        Heap                                 -Xms : taille au démarrage                            ...
Young vs Old                           Old                          Young                                      73Monday, A...
Young vs Old                           Old                                      -XX:NewSize -XX:MaxNewSize                ...
Young vs Old                                      •“Working Set”                           Old        •Caches, Pools d’obj...
Young trop petite:                              Old                             Young                                     ...
Young trop petite:                              Old                                            Young se remplit très vite ...
Young trop grande:                              Old                             Young                                     ...
Young trop grande:                              Old                                            Pauses de GC Young plus    ...
Réglage de Young                             Old                                           NewRatio=8 pour -server sur Int...
Réglage de Young                             Old                                          On augmente Young progressivemen...
Old: attention à la fragmentation!                                      Old                                     Young     ...
Old: attention à la fragmentation!                                     K6 < u22:      on failed)                          ...
Old generation : évolution idéale                                                           78Monday, April 23, 12
Old generation : évolution réelle                                                           79Monday, April 23, 12
Old generation : évolutions comparées                                                               80Monday, April 23, 12
Old generation : évolutions comparées                                    Accélérations                                    ...
Contraintes supplémentaires                  •    Prise en compte des variations irrégulières                  •    Augmen...
Contraintes supplémentaires                  •    Prise en compte des variations irrégulières                  •    Augmen...
Marge de manoeuvre                              Old                             Young                                     ...
Marge de manoeuvre                                        CMSInitiatingOccupancyFraction = 92%                            ...
Marge de manoeuvre                                            75-80% pour plus de marge                                   ...
CMS initial-mark                                          83Monday, April 23, 12
CMS initial-mark (cumulé)                                                   84Monday, April 23, 12
CMS initial-mark (cumulé)                        Mediane: -83%                                                   84Monday,...
CMS initial-mark (cumulé)                           Top 99%: -79%                        Mediane: -83%                    ...
CMS remark                                    85Monday, April 23, 12
CMS remark (cumulé)                                             86Monday, April 23, 12
CMS remark (cumulé)                                     Top 90%: -56%                                                     ...
Il reste des pauses !                  •    RMI (donc JMX) provoque des GC explicites à intervalles réguliers             ...
Comparatif complet des GC                                                   88Monday, April 23, 12
89Monday, April 23, 12
89Monday, April 23, 12
Et après?                  •        Tuning des Survivors                       •    Taille, ratio de survivants, age maxim...
Questions ?                                     91Monday, April 23, 12
Prochain SlideShare
Chargement dans…5
×

OOM m'a tuer - Devoxx France 2012

8 845 vues

Publié le

By Frank Pavageau and Renaud Bruyeron

Publié dans : Technologie
1 commentaire
9 j’aime
Statistiques
Remarques
Aucun téléchargement
Vues
Nombre de vues
8 845
Sur SlideShare
0
Issues des intégrations
0
Intégrations
500
Actions
Partages
0
Téléchargements
79
Commentaires
1
J’aime
9
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • pause sondage\n
  • pause sondage\n
  • pause sondage\n
  • pause sondage\n
  • pause sondage\n
  • pause sondage\n
  • pause sondage\n
  • pause sondage\n
  • pause sondage\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • g&amp;#xE9;n&amp;#xE9;rations\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • analogie avec le toubib\n
  • sismographe?\n
  • sondage\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • OOM m'a tuer - Devoxx France 2012

    1. 1. OOM m’a tuer Renaud Bruyeron @brew_your_own Frank Pavageau @fpavageau 1Monday, April 23, 12
    2. 2. Agenda 1. La scène du crime 2. La gestion de la mémoire dans la JVM: les bases, les outils 3. Application 2Monday, April 23, 12
    3. 3. Renaud Bruyeron @brew_your_own CTO d’ • Débuts au • C -> Perl -> PHP -> Java 3Monday, April 23, 12
    4. 4. Renaud Bruyeron @brew_your_own CTO d’ • Débuts au • C -> Perl -> PHP -> Java 3Monday, April 23, 12
    5. 5. Frank Pavageau @fpavageau Architecte Senior • C++ -> PHP -> Java • Systèmes et devops • Tech Lead socle eCommerce 4Monday, April 23, 12
    6. 6. Frank Pavageau @fpavageau Architecte Senior • C++ -> PHP -> Java • Systèmes et devops • Tech Lead socle eCommerce 4Monday, April 23, 12
    7. 7. Une Plateforme web e-commerce B2C Apache Tomcat Oracle 5Monday, April 23, 12
    8. 8. Une Plateforme web e-commerce B2C Apache •12+ Serveurs Tomcat •10 Webapps différentes •50+ JVMs Oracle (JDK6) Oracle 5Monday, April 23, 12
    9. 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 5Monday, April 23, 12
    10. 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() 6Monday, April 23, 12
    11. 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 6Monday, April 23, 12
    12. 12. vs. Débit Latence 7Monday, April 23, 12
    13. 13. 8Monday, April 23, 12
    14. 14. Application interactive: Il faut privilégier les temps de réponse! 8Monday, April 23, 12
    15. 15. Le flagrant délit Connections JDBC Temps 9Monday, April 23, 12
    16. 16. Le flagrant délit Connections JDBC Requêtes/s Temps Temps 9Monday, April 23, 12
    17. 17. Le flagrant délit Connections JDBC Requêtes/s Temps Temps Threads actifs Temps 9Monday, April 23, 12
    18. 18. Le flagrant délit Connections JDBC Requêtes/s Temps Temps Threads actifs Requêtes en attente (Executor Queue Size) Temps Temps 9Monday, April 23, 12
    19. 19. l’explication HeapTaille en MB 1 heure 10 Monday, April 23, 12
    20. 20. l’explication Heap On manque de recul: zoom arrière!Taille en MB 1 heure 10 Monday, April 23, 12
    21. 21. l’explication HeapTaille en MB 24 heures 11 Monday, April 23, 12
    22. 22. l’explication HeapTaille en MB 24 heures 11 Monday, April 23, 12
    23. 23. l’explication HeapTaille en MB 24 heures 11 Monday, April 23, 12
    24. 24. l’explication Heap % de temps passé en GC 100 75Taille en MB 50 25 0 1 heure 1 heure 12 Monday, April 23, 12
    25. 25. The usual suspects... 13Monday, April 23, 12
    26. 26. The usual suspects... • OutOfMemory Heap 13Monday, April 23, 12
    27. 27. The usual suspects... • OutOfMemory Heap • OutOfMemory PermGen 13Monday, April 23, 12
    28. 28. The usual suspects... • OutOfMemory Heap • OutOfMemory PermGen • Longues pauses de la JVM 13Monday, April 23, 12
    29. 29. The usual suspects... • OutOfMemory Heap • OutOfMemory PermGen • Longues pauses de la JVM ➡ Sous forte charge = plantage assuré 13Monday, April 23, 12
    30. 30. The usual suspects... • OutOfMemory Heap • OutOfMemory PermGen • Longues pauses de la JVM ➡ Sous forte charge = plantage assuré 13Monday, April 23, 12
    31. 31. The usual suspects... • OutOfMemory Heap • OutOfMemory PermGen • Longues pauses de la JVM ➡ Sous forte charge = plantage assuré 13Monday, April 23, 12
    32. 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. 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 14Monday, April 23, 12
    34. 34. OK, donc il suffit de régler quelques options... 15Monday, April 23, 12
    35. 35. OK, donc il suffit de régler quelques options... 664 options....Source: Oracle JVM 1.6.0_31 x86_64 server 15Monday, April 23, 12
    36. 36. 16Monday, April 23, 12
    37. 37. 16Monday, April 23, 12
    38. 38. La mémoire dans la JVM JVM 17Monday, April 23, 12
    39. 39. Metadata de classes, Permanent (PermGen) Strings internées, etc. JVM 18Monday, April 23, 12
    40. 40. Metadata de classes, Permanent (PermGen) Strings internées, etc. Heap Les objets 19Monday, April 23, 12
    41. 41. Permanent (PermGen) Old / Tenured Young / New 20Monday, April 23, 12
    42. 42. Permanent (PermGen) Old / Tenured Eden S0 S1 21Monday, April 23, 12
    43. 43. Approche générationelle du GC r0 r1 v ivo v ivo en ur ur Ed S S Old 22Monday, April 23, 12
    44. 44. r0 r1 v ivo v ivo en ur ur Ed S S Allocation Old 23Monday, April 23, 12
    45. 45. r0 r1 v ivo v ivo en ur ur Ed S S Old 24Monday, April 23, 12
    46. 46. r0 r1 v ivo v ivo en ur ur Ed S S 100% = GC! Old 25Monday, April 23, 12
    47. 47. r0 r1 v ivo v ivo en ur ur Ed S S Mort Référencé Old 26Monday, April 23, 12
    48. 48. r0 r1 v ivo v ivo en ur ur Ed S S Copie Old 27Monday, April 23, 12
    49. 49. r0 r1 v ivo v ivo en ur ur Ed S S Remise à zéro... Old 28Monday, April 23, 12
    50. 50. r0 r1 v ivo v ivo en ur ur Ed S S Allocation Old 29Monday, April 23, 12
    51. 51. r0 r1 v ivo v ivo en ur ur Ed S S 100% = GC ! Old 30Monday, April 23, 12
    52. 52. r0 r1 v ivo v ivo en ur ur Ed S S Old 31Monday, April 23, 12
    53. 53. r0 r1 v ivo v ivo en ur ur Ed S S Copie Old 32Monday, April 23, 12
    54. 54. r0 r1 v ivo v ivo en ur ur Ed S S Copie Old 33Monday, April 23, 12
    55. 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 34Monday, April 23, 12
    56. 56. r0 r1 v ivo v ivo en ur ur Ed S S Allocation Old 35Monday, April 23, 12
    57. 57. r0 r1 v ivo v ivo en ur ur Ed S S 100% = GC ! Old 36Monday, April 23, 12
    58. 58. r0 r1 v ivo v ivo en ur ur Ed S S Copie Old 37Monday, April 23, 12
    59. 59. r0 r1 v ivo v ivo en ur ur Ed S S Promotion Old 38Monday, April 23, 12
    60. 60. Old 39Monday, April 23, 12
    61. 61. “Assez plein” =Old ! GC 40Monday, April 23, 12
    62. 62. 41Monday, April 23, 12
    63. 63. 42Monday, April 23, 12
    64. 64. Old Compaction (optionnelle) 43Monday, April 23, 12
    65. 65. 44Monday, April 23, 12
    66. 66. Garbage Collectors • Générationnels • Stop the world! • Throughput ou Concurrent 45Monday, April 23, 12
    67. 67. Combinaisons de GCs Young Serial Parallel Serial Old Parallel Concurrent 46Monday, April 23, 12
    68. 68. Combinaisons de GCs Young Serial Parallel Serial Par défaut Old Parallel N/A Concurrent 47Monday, April 23, 12
    69. 69. Combinaisons de GCs Young Serial Parallel Serial Old Parallel Concurrent 48Monday, April 23, 12
    70. 70. Combinaisons de GCs Young Serial Parallel Serial Serial Old Parallel Concurrent 48Monday, April 23, 12
    71. 71. Combinaisons de GCs Young Serial Parallel Serial Serial Parallel Old Parallel Concurrent 48Monday, April 23, 12
    72. 72. Combinaisons de GCs Young Serial Parallel Serial Serial Parallel Old Parallel ParallelOld Concurrent 48Monday, April 23, 12
    73. 73. Combinaisons de GCs Young Serial Parallel Serial Serial Parallel Old Parallel ParallelOld Concurrent CMS 48Monday, April 23, 12
    74. 74. Combinaisons de GCs Young Serial Parallel Serial Serial Parallel Old Parallel ParallelOld Concurrent CMS Serial CMS 48Monday, April 23, 12
    75. 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 49Monday, April 23, 12
    76. 76. Comparatif des GCs 50Monday, April 23, 12
    77. 77. Comparatif des GCs 50Monday, April 23, 12
    78. 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) 51Monday, April 23, 12
    79. 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 52Monday, April 23, 12
    80. 80. Les outils: GUIs 53Monday, April 23, 12
    81. 81. Les outils: GUIs (2) • Un profiler • Pendant le dev • Pour les autopsies! 54Monday, April 23, 12
    82. 82. Les outils: GUIs (2) • Un profiler • Pendant le dev • Pour les autopsies! HeapDumpOnOutOfMemoryError HeapDumpPath 54Monday, April 23, 12
    83. 83. verbose:gc 55Monday, April 23, 12
    84. 84. verbose:gc 55Monday, April 23, 12
    85. 85. verbose:gc 55Monday, April 23, 12
    86. 86. verbose:gc 55Monday, April 23, 12
    87. 87. verbose:gc 55Monday, April 23, 12
    88. 88. verbose:gc 55Monday, April 23, 12
    89. 89. verbose:gc 55Monday, April 23, 12
    90. 90. verbose:gc Stop the world! 55Monday, April 23, 12
    91. 91. verbose:gc Stop the world! 55Monday, April 23, 12
    92. 92. MBeans 56Monday, April 23, 12
    93. 93. OK, donc on sait mesurer... la température! 57Monday, April 23, 12
    94. 94. OK, donc on sait mesurer... la température ! = 58Monday, April 23, 12
    95. 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 59Monday, April 23, 12
    96. 96. Donc il faut persister les mesures ! • JMX + jmxtrans • RRD • Graphite • etc. 60Monday, April 23, 12
    97. 97. On peut modifier les réglages...Credit: http://www.our-energy.com 61Monday, April 23, 12
    98. 98. ... si on sait mesurer/isoler les effets des réglages Situation “avant” cputime Effet visible du tuning 62Monday, April 23, 12
    99. 99. Application et Résultats 63Monday, April 23, 12
    100. 100. Minimiser la fréquence et la durée des pauses de GC Young (ParNew) Old (CMS-initial-mark + CMS-remark) 64Monday, April 23, 12
    101. 101. vs. 65Monday, April 23, 12
    102. 102. JVM Tomcat vs. Application (code) 65Monday, April 23, 12
    103. 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 66Monday, April 23, 12
    104. 104. Exemple : HashMap HashMap 48 Entry[16] 80 key Entry 32 value 67Monday, April 23, 12
    105. 105. Exemple : HashMap HashMap 48 Entry[16] 80 key Overhead = 160 Bytes! Entry 32 value 67Monday, April 23, 12
    106. 106. Exemple : HashMap HashMap 48 Entry[16] 80 key Overhead = 160 Bytes! Entry 32 value •SingletonMap (40 Bytes) •initialCapacity + loadFactor 67Monday, April 23, 12
    107. 107. GC Young / s Réduire les allocations... 68Monday, April 23, 12
    108. 108. Charge CPU ... impacte la CPU 69Monday, April 23, 12
    109. 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! 70Monday, April 23, 12
    110. 110. 3. Heap Size La JVM Time Heap Size Time 71Monday, April 23, 12
    111. 111. 3. La JVM pause > 1s ! Heap Size Time Heap Size Time 71Monday, April 23, 12
    112. 112. 3. La JVM pause > 1s ! Heap Size Time Heap Size GC très fréquents Time 71Monday, April 23, 12
    113. 113. La heap Heap 72Monday, April 23, 12
    114. 114. La heap Heap -Xms : taille au démarrage -Xmx : taille max 72Monday, April 23, 12
    115. 115. Young vs Old Old Young 73Monday, April 23, 12
    116. 116. Young vs Old Old -XX:NewSize -XX:MaxNewSize -XX:NewRatio Young 73Monday, April 23, 12
    117. 117. Young vs Old •“Working Set” Old •Caches, Pools d’objets •HttpSession, objets de durée de vie intermédiaire Young Objets < RequestScope 73Monday, April 23, 12
    118. 118. Young trop petite: Old Young 74Monday, April 23, 12
    119. 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 74Monday, April 23, 12
    120. 120. Young trop grande: Old Young 75Monday, April 23, 12
    121. 121. Young trop grande: Old Pauses de GC Young plus longues Young 75Monday, April 23, 12
    122. 122. Réglage de Young Old NewRatio=8 pour -server sur Intel = Trop peu de Young pour une webapp Young avec de la charge! 76Monday, April 23, 12
    123. 123. Réglage de Young Old On augmente Young progressivement en mesurant les effets! Young 76Monday, April 23, 12
    124. 124. Old: attention à la fragmentation! Old Young 77Monday, April 23, 12
    125. 125. Old: attention à la fragmentation! K6 < u22: on failed) JD Old omoti 15595) (pr ure size = fail (promotion ParNew Young 77Monday, April 23, 12
    126. 126. Old generation : évolution idéale 78Monday, April 23, 12
    127. 127. Old generation : évolution réelle 79Monday, April 23, 12
    128. 128. Old generation : évolutions comparées 80Monday, April 23, 12
    129. 129. Old generation : évolutions comparées Accélérations 80Monday, April 23, 12
    130. 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 81Monday, April 23, 12
    131. 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 81Monday, April 23, 12
    132. 132. Marge de manoeuvre Old Young 82Monday, April 23, 12
    133. 133. Marge de manoeuvre CMSInitiatingOccupancyFraction = 92% par défaut Old Young 82Monday, April 23, 12
    134. 134. Marge de manoeuvre 75-80% pour plus de marge UseCMSInitiatingOccupancyOnly pour forcer le déclenchement uniquement sur ce critère! Old Young 82Monday, April 23, 12
    135. 135. CMS initial-mark 83Monday, April 23, 12
    136. 136. CMS initial-mark (cumulé) 84Monday, April 23, 12
    137. 137. CMS initial-mark (cumulé) Mediane: -83% 84Monday, April 23, 12
    138. 138. CMS initial-mark (cumulé) Top 99%: -79% Mediane: -83% 84Monday, April 23, 12
    139. 139. CMS remark 85Monday, April 23, 12
    140. 140. CMS remark (cumulé) 86Monday, April 23, 12
    141. 141. CMS remark (cumulé) Top 90%: -56% 86Monday, April 23, 12
    142. 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 87Monday, April 23, 12
    143. 143. Comparatif complet des GC 88Monday, April 23, 12
    144. 144. 89Monday, April 23, 12
    145. 145. 89Monday, April 23, 12
    146. 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! 90Monday, April 23, 12
    147. 147. Questions ? 91Monday, April 23, 12

    ×