The document discusses various tools and techniques for investigating memory issues in Java applications, including:
- Using JDK commands like jcmd, jps, jstat, and jmap to analyze heap dumps and GC logs
- Setting JVM parameters like -XX:+PrintGCDetails to log GC information
- Using GC log analyzers and profilers like GCViewer and Java Mission Control
- Dumping the heap with jmap or -XX:+HeapDumpOnOutOfMemoryError
- Analyzing heap dumps with the Memory Analyzer Tool to find memory leaks
The overall focus is on the debugging tools and approaches available for memory and GC troubleshooting in Java.
1 of 91
Download to read offline
More Related Content
Bo?te outils d'investigation des soucis de mmoire
1. #DevoxxFR
Bo?te outils d'investigation
des soucis de mmoire
Jean Bisutti (Arolla)
@jean_bisutti
1
14. #DevoxxFR
Logs GC
Ajouter des paramtres la
JVM
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:gc.log
JDK 9
JEP 158
Unified JVM
Logging
-XLog
-Xms100m -Xmx100m
R A M
47. #DevoxxFR
Dclencher un dump de la heap
jmap -dump:live,format=b,file=fileName.hprof pid
jcmd pid GC.heap_dump fileName.hprof
M
E
M
O
R
Y
L
E
A
K
48. #DevoxxFR
Dclencher un dump de la heap
jmap -dump:live,format=b,file=fileName.hprof pid
jcmd pid GC.heap_dump fileName.hprof
M
E
M
O
R
Y
L
E
A
K
49. #DevoxxFR
Dclencher un dump de la heap
jmap -dump:live,format=b,file=fileName.hprof pid
jcmd pid GC.heap_dump fileName.hprof
Paramtre JVM : -XX:+HeapDumpOnOutOfMemoryError
M
E
M
O
R
Y
L
E
A
K
#2: La JVM utilise utilise types de mmoire: heap, off-heap et metaspace par exemple
#12: Jai lanc lapplication pendant une heure. Jai ajout des paramtres la JVM
#17: -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log
Faire Full GC
The copy-on-write collections derive their thread safety from the fact that as long as en effectively immutable object is properly published, no further synchronization is required when accessing it. They implement mutability by cmultreating and republishing a new copy of the collection every time it is modified.
TLAB : Thread Local Allocation Buffer. Dans leden, des threads ont une rgion ddie o ils allouent des objets.
Thread-Local Allocation buffers (TLABs) improving multithreaded allocation throughput by giving each thread its own buffer (i.e., a small chunk of the eden) from which to allocate.
OOP : Ordinary Object Pointer
For heaps that are between 4Gb and 32 Gb, use compressed oops.
#20: Les algorithmes de ramasse miette divise la heap en diffrentes gnrations : la young generation et la old generation. La young generation est elle-mme Les objets de courte dure de vie vont tre situs dans la young gen. Ceux de dure longue vont se retrouver dans la old gen.
Paralell GC
multiple threads are used to speed up garbage collection
#21: Un GC mineur est dclench lorsque leden est pleine.
#22: Le GC mineur enlve tous les objets de leden : certains sont dplacs vers dans une zone survivor, dautres sont dplacs vers la old gen. De nombreux objets plus rfrencs sont supprims.
#23: Lors dun full GC, toute la young gen est vide.
Les objets restant dans la old gen sont ceux toujours rfrencs.
#24: Lors dun full GC, toute la young gen est vide.
Les objets restant dans la old gen sont ceux toujours rfrencs.
#31:
Nous pouvons nous demander pourquoi la old gen est si remplie.
Le JDK propose des commandes pour collecter des informations sur les JVM en cours dexcution.
#40: Nous avons vu que la old gen tait bien remplie.
Il serait bien de savoir quelles sont les objets prsents dans la heap.
Lapplication a-t-elle besoin de plus de mmoire pour fonctionner ou bien des objets sont-ils inutilement maintenus en mmoire ???
#47: Ensuite les plus gros objets prsents dans la heap sont des tableaux dobjet
Nous allons nous aider dun outils
Avant cela nous allons dclencher un dump de la heap.
#51: Le Memory Analyzer Tool permet de trouver l'origine d'une fuite mmoire en se basant sur le dominator tree.
Un objet C domine un objet D si tous les chemins pour arriver D doivent passer par C.
#61: Cet objet est une map dont nous pouvons explorer le contenu
#67: Pourquoi maintient-t-on en mmoire 1 242 00 trades ?
#74: Il suffit en fait de stocker les trades uniquement pour la taille de fentre considr.
#76: Il serait bien davoir un outils qui nous dise quelles sont les mthodes qui cres beaucoup dobjet dans lespace young.
#83: TLAB : Thread Local Allocation Buffer. Dans leden, des threads ont une rgion ddie o ils allouent des objets
#87: Loutil nous dit que, depuis une notre mthode consume, que 40 Go de tableaux dobjets sont cres par linvocation dune mthode add dune CopyOnWriteArrayList.
#88: Pour corriger ce problme nous pourrions utiliser une BlockingQueue. Nous pourrions aussi
#92: Commandes scriptables
GC Viewer : analyse posteriori (on peut rcuprer logs de production)
Le profiler nous a permis de trouver quelle mthode alloue une quantit importante dobjets faible dure de vie.
Le Memory Analyser Tool nous a permis de trouver lobjet qui maintenait une grappe importante dobjets en mmoire. Nous avons ainsi pu corriger le problme de fuite mmoire.