SlideShare une entreprise Scribd logo
1  sur  31
1
Tél : +41 21 312 94 15
www.octo.com
© OCTO 2015
Avenue du théâtre 7
CH-1005 Lausanne - SUISSE
Comment ne plus ajouter de
RAM à vos JVM sans savoir
pourquoi...
2
ANALYSE DE JVM LIVE
Agenda
2
ANALYSE DE DUMP
3
PRINCIPES DE GESTION DE MÉMOIRE EN JAVA1
TAKE AWAY4
3
Cette présentation est focalisée sur OpenJdk, les notions
présentées restent cependant valables pour
  G1 (algorithme GC Java 8+)
  La JVM d’IBM
Pour des raisons de compréhension, certains mécanismes sont
simplifiés…
Avant propos
4
Principes de gestion de mémoire en Java
5
La plupart des objets ne survivent pas longtemps
  Il est plus efficace de rechercher prioritairement les objets à nettoyer
parmi les jeunes objets
Hypothèse générationnelle (Java 1.4+)
nb instances
age / temps
6
3 memory pools
Young Generation
Old Generation
Perm
7
3 memory pools
Young Generation
Old Generation
Perm
1
8
3 memory pools
Young Generation
Old Generation
Perm
1
2
9
3 memory pools
Young Generation
Old Generation
Perm
1
2
3
10
Options de la JVM
11
Lorsqu’il n’est plus référencé (indirectement) par une racine (‘root’)
Java n’utilise pas un mécanisme de compteur de références
  Il n’y a pas de fuite mémoire technique possible
Les racines sont constituées de tout ce qui permet d’atteindre un objet :
  Des piles d’appels (stack)
  Des registres CPU
  Des références JNI
  Des autres Memory Pools
Tenured pour Young
  Young pour Tenured
  Des ClassLoader
  Avec les variables statiques
Quand un objet peut-il être nettoyé ?
La promotion précoce
d’objets en Tenured
provoquera d’autres
problèmes par la suite
12
Les ‘strong references’ sont des ‘pointeurs’
  Object a = b;
object.attribut = c
Mais aussi les autres types de référence (java.lang.ref.Reference)
SoftReference, WeakReference, and PhantomReference
Références
13
Young Tenured
(1) (1) (6) (6)
Root
Références Cross Memory Pool
14
Young Tenured
(1) (1) (6) (6)
Root
Minor GC
Références Cross Memory Pool
15
Young Tenured
(7) (7)
Root
(2) (2)
Références Cross Memory Pool
16
Références Cross Memory Pool
Young Tenured
(7) (7)
Root
(2) (2)
X
17
Young Tenured
(7) (7)
Root
(2) (2)
X
??
Minor GC
Références Cross Memory Pool
18
Young Tenured
(7) (7)
Root
(2) (2)
X
Root
Références Cross Memory Pool
19
La promotion précoce d’objets en Tenured provoquera d’autres
problèmes par la suite
Mettre des références à null aide le collecteur à mieux libérer la
mémoire
  En restant raisonnable
Références Cross Memory Pool
20
Un GC survient lors d’un échec d’allocation
  La mémoire est pleine
  La mémoire est trop fragmentée pour la taille souhaitée
Lors d’un GC, on parcours le graph des objets référencés par toutes
les racines
  Un partie de ce parcours est bloquant (stop-the-world)
  Le SWAP de JVM durant un stop-the-world est dramatique
Fonctionnement - sommaire - des algorithmes Java
21
Le parcours de toutes les racines n’est pas efficace pour un Young GC
  Ne passe pas l’échelle lorsque la taille de la JVM augmente
On utilise un mécanisme de ‘dirty cards’ pour limiter le parcours de la
mémoire
Fonctionnement - sommaire - des algorithmes Java
0 reference card0
Eden S0 S1 Tenured
B A
0 0 0 0 0 0 0 0 0 0
512bytes
0 reference card0
Eden S0 S1 Tenured
B A
0 0 0 0 0 0 0 0 0
512bytes
01 0
22
Démo
23
Monitorer vos JVM
  Live
Analyser vos traces GC
  Analyser a posteriori l’évolution de la mémoire et des GC
Analyser vos dumps mémoire
  Comprendre ce qui remplit votre JVM au runtime
Démo
24
Identifier votre vrai problème [1/2]
Memory leak
25
Memory consumption
Identifier votre vrai problème [2/2]
26
Dominator Tree
An object x dominates an object y if every path in the object graph
from the start (or the root) node to y must go through x.
The immediate dominator x of some object y is the dominator
closest to the object y.
27
Take away
28
Pas d’optiomisation a priori
  “Premature optimization is the root of all evil”
Measure Don’t Guess
Remettez vos habitudes en question
  Les JVM ont évolué, des paramêtres utilisés sur de vieux Jdk n’ont plus de raison d’être
  Exemple : -Xms != -Xmx
Mettez à jour vos JVM
Mettez en place le monitoring distant
jdk/bin/jstatd -J-Djava.security.policy=security.policy
Activer les traces sur vos JVM
  Log GC
  -Xloggc:logs/gc-`date '+%Y%m%d-%H%M'`.log
  -XX:+PrintGCDetails -XX:+PrintTenuringDistribution
  -XX:+PrintGCCause -XX:+PrintGCApplicationStoppedTime
  Analyse avec http://www.hp.com/go/java (free) ou http://www.jclarity.com/censum/ (payant)
  -XX:+HeapDumpOnOutOfMemoryError
  Faites des heapdumps avant d’éteindre vos JVM
sudo jmap -dump:file=memory.hprof -F $pid
Take away
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
29
Tél : +41 21 312 94 15
www.octo.com
© OCTO 2015
Avenue du théâtre 7
CH-1005 Lausanne - SUISSE
+Philippe Kernevez
@pkernevez
pkernevez@octo.com
30
recrutement@octo.com
Vous croyez que les technologies changent le
monde ?
Nous aussi ! Rejoignez-nous !
31
https://redstack.wordpress.com/2011/01/06/visualising-garbage-
collection-in-the-jvm/
http://www.infoq.com/articles/Java_Garbage_Collection_Distilled
Crédits

Contenu connexe

Tendances

Tests d'intégration avec Arquillian
Tests d'intégration avec ArquillianTests d'intégration avec Arquillian
Tests d'intégration avec ArquillianAlexis Hassler
 
soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
soft-shake.ch - Tests d'intégration JavaEE avec Arquilliansoft-shake.ch - Tests d'intégration JavaEE avec Arquillian
soft-shake.ch - Tests d'intégration JavaEE avec Arquilliansoft-shake.ch
 
Guss webcasts Query Memory Grants - june 2013
Guss webcasts   Query Memory Grants - june 2013Guss webcasts   Query Memory Grants - june 2013
Guss webcasts Query Memory Grants - june 2013David BAFFALEUF
 
Paris JUG Spring Batch
Paris JUG Spring BatchParis JUG Spring Batch
Paris JUG Spring BatchOlivier BAZOUD
 
Chtijug springbatch 2011
Chtijug springbatch 2011Chtijug springbatch 2011
Chtijug springbatch 2011Olivier BAZOUD
 
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
 
BreizhCamp 2013 - Crash test à haute vitesse
BreizhCamp 2013 - Crash test à haute vitesseBreizhCamp 2013 - Crash test à haute vitesse
BreizhCamp 2013 - Crash test à haute vitesseAntonio Gomes Rodrigues
 
3 t drools
3 t drools3 t drools
3 t droolsjeansoat
 
Systèmes d'Exploitation - chp2-gestion des processus
Systèmes d'Exploitation - chp2-gestion des processusSystèmes d'Exploitation - chp2-gestion des processus
Systèmes d'Exploitation - chp2-gestion des processusLilia Sfaxi
 
Methodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlMethodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlCodizy
 
Arquillian - Ippevent 01/2012
Arquillian - Ippevent 01/2012Arquillian - Ippevent 01/2012
Arquillian - Ippevent 01/2012Alexis Hassler
 

Tendances (12)

Tests d'intégration avec Arquillian
Tests d'intégration avec ArquillianTests d'intégration avec Arquillian
Tests d'intégration avec Arquillian
 
soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
soft-shake.ch - Tests d'intégration JavaEE avec Arquilliansoft-shake.ch - Tests d'intégration JavaEE avec Arquillian
soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
 
Guss webcasts Query Memory Grants - june 2013
Guss webcasts   Query Memory Grants - june 2013Guss webcasts   Query Memory Grants - june 2013
Guss webcasts Query Memory Grants - june 2013
 
Paris JUG Spring Batch
Paris JUG Spring BatchParis JUG Spring Batch
Paris JUG Spring Batch
 
Chtijug springbatch 2011
Chtijug springbatch 2011Chtijug springbatch 2011
Chtijug springbatch 2011
 
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
 
§T-ydée
§T-ydée§T-ydée
§T-ydée
 
BreizhCamp 2013 - Crash test à haute vitesse
BreizhCamp 2013 - Crash test à haute vitesseBreizhCamp 2013 - Crash test à haute vitesse
BreizhCamp 2013 - Crash test à haute vitesse
 
3 t drools
3 t drools3 t drools
3 t drools
 
Systèmes d'Exploitation - chp2-gestion des processus
Systèmes d'Exploitation - chp2-gestion des processusSystèmes d'Exploitation - chp2-gestion des processus
Systèmes d'Exploitation - chp2-gestion des processus
 
Methodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlMethodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysql
 
Arquillian - Ippevent 01/2012
Arquillian - Ippevent 01/2012Arquillian - Ippevent 01/2012
Arquillian - Ippevent 01/2012
 

En vedette

Dr pierre dupont dentiste – un professionnel hautement reconnu dans sa commun...
Dr pierre dupont dentiste – un professionnel hautement reconnu dans sa commun...Dr pierre dupont dentiste – un professionnel hautement reconnu dans sa commun...
Dr pierre dupont dentiste – un professionnel hautement reconnu dans sa commun...paultestani
 
Cómo emitir por youtube en directo desde Google Hangouts
Cómo emitir por youtube en directo desde Google HangoutsCómo emitir por youtube en directo desde Google Hangouts
Cómo emitir por youtube en directo desde Google HangoutsCamino López García
 
Accord de bonnes pratiques profession achats
Accord de bonnes pratiques   profession achatsAccord de bonnes pratiques   profession achats
Accord de bonnes pratiques profession achatsL'Observatoire COM MEDIA
 
L’engagement de la mouvance anti-nucléaire dans l’espace médiatique. Le cas d...
L’engagement de la mouvance anti-nucléaire dans l’espace médiatique. Le cas d...L’engagement de la mouvance anti-nucléaire dans l’espace médiatique. Le cas d...
L’engagement de la mouvance anti-nucléaire dans l’espace médiatique. Le cas d...Mikaël Chambru
 
Realidad aumentada para taller 22noviembre
Realidad aumentada para taller 22noviembreRealidad aumentada para taller 22noviembre
Realidad aumentada para taller 22noviembre Claudia castiglioni
 
Jimmy en la presa de caltzontzin
Jimmy en la presa de caltzontzinJimmy en la presa de caltzontzin
Jimmy en la presa de caltzontzinNancy A.
 
Qué es un wiki
Qué es un wikiQué es un wiki
Qué es un wikiJ Ospina
 
Arrêté tolérances orthographiques 1976
Arrêté tolérances orthographiques 1976Arrêté tolérances orthographiques 1976
Arrêté tolérances orthographiques 1976H-Bartleby
 
Carnaval de bressuire
Carnaval de bressuireCarnaval de bressuire
Carnaval de bressuire241169241272
 
Dossier de production groupe 141
Dossier de production groupe 141Dossier de production groupe 141
Dossier de production groupe 141AlainPassini
 
Accueillir la présence de dieu
Accueillir la présence de dieuAccueillir la présence de dieu
Accueillir la présence de dieuClevangile
 
Comuniquemonos a tiempo (Redes Sociales)
Comuniquemonos a tiempo (Redes Sociales)Comuniquemonos a tiempo (Redes Sociales)
Comuniquemonos a tiempo (Redes Sociales)jarco19
 
Presentación educación en cuba
Presentación educación en cubaPresentación educación en cuba
Presentación educación en cubaLirio Figueroa
 
Matematica discreta informe
Matematica discreta informeMatematica discreta informe
Matematica discreta informeJhojan Mendoza
 

En vedette (20)

Dr pierre dupont dentiste – un professionnel hautement reconnu dans sa commun...
Dr pierre dupont dentiste – un professionnel hautement reconnu dans sa commun...Dr pierre dupont dentiste – un professionnel hautement reconnu dans sa commun...
Dr pierre dupont dentiste – un professionnel hautement reconnu dans sa commun...
 
Où sont les geeks ?
Où sont les geeks ?Où sont les geeks ?
Où sont les geeks ?
 
Cómo emitir por youtube en directo desde Google Hangouts
Cómo emitir por youtube en directo desde Google HangoutsCómo emitir por youtube en directo desde Google Hangouts
Cómo emitir por youtube en directo desde Google Hangouts
 
Accord de bonnes pratiques profession achats
Accord de bonnes pratiques   profession achatsAccord de bonnes pratiques   profession achats
Accord de bonnes pratiques profession achats
 
L’engagement de la mouvance anti-nucléaire dans l’espace médiatique. Le cas d...
L’engagement de la mouvance anti-nucléaire dans l’espace médiatique. Le cas d...L’engagement de la mouvance anti-nucléaire dans l’espace médiatique. Le cas d...
L’engagement de la mouvance anti-nucléaire dans l’espace médiatique. Le cas d...
 
Realidad aumentada para taller 22noviembre
Realidad aumentada para taller 22noviembreRealidad aumentada para taller 22noviembre
Realidad aumentada para taller 22noviembre
 
Informe
InformeInforme
Informe
 
Podcastslimou
PodcastslimouPodcastslimou
Podcastslimou
 
Jimmy en la presa de caltzontzin
Jimmy en la presa de caltzontzinJimmy en la presa de caltzontzin
Jimmy en la presa de caltzontzin
 
Qué es un wiki
Qué es un wikiQué es un wiki
Qué es un wiki
 
Arrêté tolérances orthographiques 1976
Arrêté tolérances orthographiques 1976Arrêté tolérances orthographiques 1976
Arrêté tolérances orthographiques 1976
 
25 Astuces Twitter
25 Astuces Twitter25 Astuces Twitter
25 Astuces Twitter
 
Taller de Expresión y Desarrollo Integral A.C.
Taller de Expresión y Desarrollo Integral A.C.Taller de Expresión y Desarrollo Integral A.C.
Taller de Expresión y Desarrollo Integral A.C.
 
Deber
DeberDeber
Deber
 
Carnaval de bressuire
Carnaval de bressuireCarnaval de bressuire
Carnaval de bressuire
 
Dossier de production groupe 141
Dossier de production groupe 141Dossier de production groupe 141
Dossier de production groupe 141
 
Accueillir la présence de dieu
Accueillir la présence de dieuAccueillir la présence de dieu
Accueillir la présence de dieu
 
Comuniquemonos a tiempo (Redes Sociales)
Comuniquemonos a tiempo (Redes Sociales)Comuniquemonos a tiempo (Redes Sociales)
Comuniquemonos a tiempo (Redes Sociales)
 
Presentación educación en cuba
Presentación educación en cubaPresentación educación en cuba
Presentación educación en cuba
 
Matematica discreta informe
Matematica discreta informeMatematica discreta informe
Matematica discreta informe
 

Similaire à Softshake 2015 Comment ne plus rajouter de ram a vos jvm sans savoir pourquoi

Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Jérôme Tamborini
 
Direct memory 3_devoxx_fr_2012-2.04.18
Direct memory 3_devoxx_fr_2012-2.04.18Direct memory 3_devoxx_fr_2012-2.04.18
Direct memory 3_devoxx_fr_2012-2.04.18Benoit Perroud
 
Direct memory @ devoxxfr
Direct memory @ devoxxfrDirect memory @ devoxxfr
Direct memory @ devoxxfrOlivier Lamy
 
International Journal of Engineering Research and Development (IJERD)
International Journal of Engineering Research and Development (IJERD)International Journal of Engineering Research and Development (IJERD)
International Journal of Engineering Research and Development (IJERD)IJERD Editor
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?PALO IT
 
Présentation de Apache Zookeeper
Présentation de Apache ZookeeperPrésentation de Apache Zookeeper
Présentation de Apache ZookeeperMichaël Morello
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computingIppon
 
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Jean-Michel Doudoux
 
Re build Nantes 2013 SQL Server monitoring
Re build Nantes 2013   SQL Server monitoringRe build Nantes 2013   SQL Server monitoring
Re build Nantes 2013 SQL Server monitoringDavid BAFFALEUF
 
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
 
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfdevoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfJean-Michel Doudoux
 
Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetupSamir Rouabhi
 
Poza 2018 11-08-jvm_presentation_du_gc
Poza 2018 11-08-jvm_presentation_du_gcPoza 2018 11-08-jvm_presentation_du_gc
Poza 2018 11-08-jvm_presentation_du_gcJozaIT
 
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Jérôme Petazzoni
 

Similaire à Softshake 2015 Comment ne plus rajouter de ram a vos jvm sans savoir pourquoi (20)

Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)
 
Diagnostic performances
Diagnostic performancesDiagnostic performances
Diagnostic performances
 
Direct memory 3_devoxx_fr_2012-2.04.18
Direct memory 3_devoxx_fr_2012-2.04.18Direct memory 3_devoxx_fr_2012-2.04.18
Direct memory 3_devoxx_fr_2012-2.04.18
 
Direct memory @ devoxxfr
Direct memory @ devoxxfrDirect memory @ devoxxfr
Direct memory @ devoxxfr
 
International Journal of Engineering Research and Development (IJERD)
International Journal of Engineering Research and Development (IJERD)International Journal of Engineering Research and Development (IJERD)
International Journal of Engineering Research and Development (IJERD)
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
 
Présentation de Apache Zookeeper
Présentation de Apache ZookeeperPrésentation de Apache Zookeeper
Présentation de Apache Zookeeper
 
The Future of Javascript
The Future of JavascriptThe Future of Javascript
The Future of Javascript
 
The future of JavaScript
The future of JavaScriptThe future of JavaScript
The future of JavaScript
 
Hibernate vs le_cloud_computing
Hibernate vs le_cloud_computingHibernate vs le_cloud_computing
Hibernate vs le_cloud_computing
 
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
 
Re build Nantes 2013 SQL Server monitoring
Re build Nantes 2013   SQL Server monitoringRe build Nantes 2013   SQL Server monitoring
Re build Nantes 2013 SQL Server monitoring
 
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
 
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfdevoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
 
Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetup
 
Poza 2018 11-08-jvm_presentation_du_gc
Poza 2018 11-08-jvm_presentation_du_gcPoza 2018 11-08-jvm_presentation_du_gc
Poza 2018 11-08-jvm_presentation_du_gc
 
Le garbage collector .NEt
Le garbage collector .NEtLe garbage collector .NEt
Le garbage collector .NEt
 
Hackerspace jan-2013
Hackerspace jan-2013Hackerspace jan-2013
Hackerspace jan-2013
 
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
 

Softshake 2015 Comment ne plus rajouter de ram a vos jvm sans savoir pourquoi

  • 1. 1 Tél : +41 21 312 94 15 www.octo.com © OCTO 2015 Avenue du théâtre 7 CH-1005 Lausanne - SUISSE Comment ne plus ajouter de RAM à vos JVM sans savoir pourquoi...
  • 2. 2 ANALYSE DE JVM LIVE Agenda 2 ANALYSE DE DUMP 3 PRINCIPES DE GESTION DE MÉMOIRE EN JAVA1 TAKE AWAY4
  • 3. 3 Cette présentation est focalisée sur OpenJdk, les notions présentées restent cependant valables pour   G1 (algorithme GC Java 8+)   La JVM d’IBM Pour des raisons de compréhension, certains mécanismes sont simplifiés… Avant propos
  • 4. 4 Principes de gestion de mémoire en Java
  • 5. 5 La plupart des objets ne survivent pas longtemps   Il est plus efficace de rechercher prioritairement les objets à nettoyer parmi les jeunes objets Hypothèse générationnelle (Java 1.4+) nb instances age / temps
  • 6. 6 3 memory pools Young Generation Old Generation Perm
  • 7. 7 3 memory pools Young Generation Old Generation Perm 1
  • 8. 8 3 memory pools Young Generation Old Generation Perm 1 2
  • 9. 9 3 memory pools Young Generation Old Generation Perm 1 2 3
  • 11. 11 Lorsqu’il n’est plus référencé (indirectement) par une racine (‘root’) Java n’utilise pas un mécanisme de compteur de références   Il n’y a pas de fuite mémoire technique possible Les racines sont constituées de tout ce qui permet d’atteindre un objet :   Des piles d’appels (stack)   Des registres CPU   Des références JNI   Des autres Memory Pools Tenured pour Young   Young pour Tenured   Des ClassLoader   Avec les variables statiques Quand un objet peut-il être nettoyé ? La promotion précoce d’objets en Tenured provoquera d’autres problèmes par la suite
  • 12. 12 Les ‘strong references’ sont des ‘pointeurs’   Object a = b; object.attribut = c Mais aussi les autres types de référence (java.lang.ref.Reference) SoftReference, WeakReference, and PhantomReference Références
  • 13. 13 Young Tenured (1) (1) (6) (6) Root Références Cross Memory Pool
  • 14. 14 Young Tenured (1) (1) (6) (6) Root Minor GC Références Cross Memory Pool
  • 15. 15 Young Tenured (7) (7) Root (2) (2) Références Cross Memory Pool
  • 16. 16 Références Cross Memory Pool Young Tenured (7) (7) Root (2) (2) X
  • 17. 17 Young Tenured (7) (7) Root (2) (2) X ?? Minor GC Références Cross Memory Pool
  • 18. 18 Young Tenured (7) (7) Root (2) (2) X Root Références Cross Memory Pool
  • 19. 19 La promotion précoce d’objets en Tenured provoquera d’autres problèmes par la suite Mettre des références à null aide le collecteur à mieux libérer la mémoire   En restant raisonnable Références Cross Memory Pool
  • 20. 20 Un GC survient lors d’un échec d’allocation   La mémoire est pleine   La mémoire est trop fragmentée pour la taille souhaitée Lors d’un GC, on parcours le graph des objets référencés par toutes les racines   Un partie de ce parcours est bloquant (stop-the-world)   Le SWAP de JVM durant un stop-the-world est dramatique Fonctionnement - sommaire - des algorithmes Java
  • 21. 21 Le parcours de toutes les racines n’est pas efficace pour un Young GC   Ne passe pas l’échelle lorsque la taille de la JVM augmente On utilise un mécanisme de ‘dirty cards’ pour limiter le parcours de la mémoire Fonctionnement - sommaire - des algorithmes Java 0 reference card0 Eden S0 S1 Tenured B A 0 0 0 0 0 0 0 0 0 0 512bytes 0 reference card0 Eden S0 S1 Tenured B A 0 0 0 0 0 0 0 0 0 512bytes 01 0
  • 23. 23 Monitorer vos JVM   Live Analyser vos traces GC   Analyser a posteriori l’évolution de la mémoire et des GC Analyser vos dumps mémoire   Comprendre ce qui remplit votre JVM au runtime Démo
  • 24. 24 Identifier votre vrai problème [1/2] Memory leak
  • 26. 26 Dominator Tree An object x dominates an object y if every path in the object graph from the start (or the root) node to y must go through x. The immediate dominator x of some object y is the dominator closest to the object y.
  • 28. 28 Pas d’optiomisation a priori   “Premature optimization is the root of all evil” Measure Don’t Guess Remettez vos habitudes en question   Les JVM ont évolué, des paramêtres utilisés sur de vieux Jdk n’ont plus de raison d’être   Exemple : -Xms != -Xmx Mettez à jour vos JVM Mettez en place le monitoring distant jdk/bin/jstatd -J-Djava.security.policy=security.policy Activer les traces sur vos JVM   Log GC   -Xloggc:logs/gc-`date '+%Y%m%d-%H%M'`.log   -XX:+PrintGCDetails -XX:+PrintTenuringDistribution   -XX:+PrintGCCause -XX:+PrintGCApplicationStoppedTime   Analyse avec http://www.hp.com/go/java (free) ou http://www.jclarity.com/censum/ (payant)   -XX:+HeapDumpOnOutOfMemoryError   Faites des heapdumps avant d’éteindre vos JVM sudo jmap -dump:file=memory.hprof -F $pid Take away grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };
  • 29. 29 Tél : +41 21 312 94 15 www.octo.com © OCTO 2015 Avenue du théâtre 7 CH-1005 Lausanne - SUISSE +Philippe Kernevez @pkernevez pkernevez@octo.com
  • 30. 30 recrutement@octo.com Vous croyez que les technologies changent le monde ? Nous aussi ! Rejoignez-nous !