Si un processus plante et laisse un vidage de mémoire ou que j'en crée un avec gcore
, comment puis-je l'analyser?
Je voudrais pouvoir utiliser jmap
, jstack
, jstat
etc et aussi voir les valeurs de toutes les variables.
De cette façon, je peux trouver les raisons d'une machine virtuelle Java bloquée ou gelée.
D'accord, si vous avez créé le vidage de mémoire avec gcore ou gdb, vous devrez le convertir en un fichier appelé HPROF . Ceux-ci peuvent être utilisés par VisualVM, Netbeans ou l'outil d'analyse de mémoire d'Eclipse (anciennement SAP Memory Analyzer). Je recommanderais Eclipse MAT.
Pour convertir le fichier, utilisez l'outil de ligne de commande jmap.
# jmap -dump:format=b,file=dump.hprof /usr/bin/Java core.1234
où:
dump.hprof est le nom du fichier hprof que vous souhaitez créer
/ usr/bin/Java est le chemin vers la version du binaire Java qui a généré le vidage de mémoire
core.1234 est votre fichier core habituel.
Si vous utilisez un IBM JVM , téléchargement le IBM Thread and Monitor Dump Analyzer . C'est un excellent outil. Il fournit des détails sur les threads et peut signaler des blocages, etc. Ce qui suit article de blog fournit une belle vue d'ensemble sur la façon de l'utiliser.
Peut-être que VisualVM peut aider (je n'ai pas encore eu l'occasion de l'essayer moi-même). Lien:
http://Java.Sun.com/javase/6/docs/technotes/guides/visualvm/coredumps.html
Êtes-vous sûr qu'un vidage de mémoire est ce que vous voulez ici? Cela contiendra les tripes brutes de la JVM en cours d'exécution, plutôt que des informations au niveau Java. Peut-être que vous avez besoin d'un vidage de tas JVM.
Voir http://www.Oracle.com/technetwork/Java/javase/tsg-vm-149989.pdf . Vous pouvez utiliser "jdb" directement sur le fichier core.
En fait, VisualVM peut traiter le vidage du cœur de l'application.
Appelez simplement "Fichier/Ajouter VM Coredump" et ajoutez une nouvelle application dans l'Explorateur d'applications. Vous pouvez ensuite effectuer un vidage de thread ou un vidage de tas de cette machine virtuelle Java.
Essayez l'analyseur de pile lady4j, il pourrait vous aider:
jhat est l'un des meilleurs que j'ai utilisé jusqu'à présent.Pour prendre un core dump, je pense que vous feriez mieux d'utiliser jmap et jps au lieu de gcore (je ne l'ai pas utilisé) .Vérifiez le lien pour voir comment utiliser jhat. http://www.lshift.net/blog/2006/03/08/Java-memory-profiling-with-jmap-and-jhat
IBM fournit également un certain nombre d'outils qui peuvent être utilisés sur le Sun jvm. Jetez un oeil à certains des projets sur alphaworks, ils fournissent un analyseur de vidage de tas et de threads
Karl
Je vous recommande d'essayer Netbeans Profiler . Il a un ensemble riche d'outils pour l'analyse en temps réel. Les outils d'IbM valent la peine d'être essayés pour une analyse hors ligne