Your SlideShare is downloading. ×
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
OOM m'a tuer - Devoxx France 2012
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

OOM m'a tuer - Devoxx France 2012

6,790

Published on

By Frank Pavageau and Renaud Bruyeron

By Frank Pavageau and Renaud Bruyeron

Published in: Technology
1 Comment
9 Likes
Statistics
Notes
No Downloads
Views
Total Views
6,790
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
74
Comments
1
Likes
9
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • \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éné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
  • Transcript

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

    ×