web-dev-qa-db-fra.com

Comment analyser le tas en utilisant jmap en java

Je crée un tas de mémoire en utilisant la commande ci-dessous:

jmap -dump:file=DumpFile.txt <process-id>

J'ai ouvert le fichier généré - DumpFile.txt mais il n'est pas dans un format lisible . Merci de me dire comment analyser les données du fichier généré.

53
Chaitanya

Vous devriez utiliser jmap -heap:format=b <process-id> sans aucun chemin. Il crée donc un fichier * .bin que vous pouvez ouvrir avec jvisualvm.exe (même chemin que jmap). C'est un excellent outil pour ouvrir de tels fichiers de vidage.

50
yves.beutler

Vous pouvez utiliser jhat (outil d'analyse du tas Java) pour lire le fichier généré:

jhat [ options ] <heap-dump-file>

La commande jhat analyse un fichier de vidage de mémoire Java et lance un serveur Web. jhat vous permet de parcourir des vidages de tas à l’aide de votre navigateur Web préféré.

Notez que vous devriez avoir une sortie au format binaire hprof pour pouvoir l’analyser avec jhat. Vous pouvez utiliser l'option format=b pour générer le dump dans ce format.

-dump:format=b,file=<filename>
35
Nishant Shreshth

Très tard pour répondre à cette question, mais cela vaut la peine de jeter un coup d'œil. Juste 2 minutes nécessaires pour comprendre en détail.

D'abord créer ce programme Java

import Java.util.ArrayList;
import Java.util.List;

public class GarbageCollectionAnalysisExample{
    public static void main(String[] args) {
           List<String> l = new ArrayList<String>();
           for (int i = 0; i < 100000000; i++) {
                  l = new ArrayList<String>(); //Memory leak
                  System.out.println(l);
           }
           System.out.println("Done");
    }
}

Utilisez jps pour trouver le vmid (identifiant de la machine virtuelle, par exemple, identifiant JVM)

Allez dans CMD et tapez ci-dessous les commandes>

C:\>jps
18588 Jps
17252 GarbageCollectionAnalysisExample
16048
2084 Main

17252 est le vmid dont nous avons besoin.

Nous allons maintenant apprendre à utiliser jmap et jhat

Utilisez jmap - pour générer un vidage de tas 

À partir de la documentation Java sur jmap “Jmap imprime les mappes de mémoire d'objets partagés ou les détails de la mémoire de tas d'un processus, d'un fichier core ou d'un serveur de débogage distant”

Utilisez la commande suivante pour générer un vidage de tas>

C:\>jmap -dump:file=E:\heapDump.jmap 17252
Dumping heap to E:\heapDump.jmap ...
Heap dump file created

Où 17252 est le vmid (choisi ci-dessus).

Le vidage de tas sera généré dans E:\heapDump.jmap

Maintenant, utilisez Jhat Jhat est utilisé pour analyser le dump de la récupération de place en Java - 

C:\>jhat E:\heapDump.jmap
Reading from E:\heapDump.jmap...
Dump file created Mon Nov 07 23:59:19 IST 2016
Snapshot read, resolving...
Resolving 241865 objects...
Chasing references, expect 48 dots................................................
Eliminating duplicate references................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

Par défaut, il démarrera le serveur http sur le port 7000 . Nous irons ensuite à http: // localhost: 7000/

Courtesy: JMAP , Comment surveiller et analyser le ramassage des ordures de 10 manières différentes

10
Ankit Mittal

Si vous utilisez Eclipse comme IDE, je recommanderais l'excellent plug-in Eclipse analyseur de mémoire

Une autre option consiste à utiliser JVisualVM, il peut également lire (et créer) des vidages de segments de mémoire et est livré avec chaque kit JDK. Vous pouvez le trouver dans le répertoire bin de votre JDK.

9
pushy

VisualVm ne vient pas avec Apple JDK. Vous pouvez utiliser le groupe d'applications VisualVM Mac (dmg) en tant qu'application distincte pour compenser cela.

5
kanaparthikiran

MAT, jprofiler, jhat sont des options possibles. Puisque jhat est fourni avec jdk, vous pouvez le lancer facilement pour effectuer des analyses de base. regarde ça

0
user1251323