web-dev-qa-db-fra.com

façons d'obtenir le vidage de tas en exécutant Tomcat 7

J'ai essayé ceci Obtenir un vidage de tas sur JVM à partir de Tomcat 6 mais cela ne fonctionne pas pour moi, existe-t-il d'autres façons d'obtenir un vidage de tas à partir du serveur Tomcat? Merci d'avance!

11
emdhie

La façon la plus simple d'obtenir le vidage de tas est d'utiliser jmap . Sur la machine avec Java process execute jmap command. Exemple d'utilisation:

jmap -dump:file=/mnt/heapdump_2013-04-01.data 29842

utilisez jps pour savoir Java Pid.


Vous pouvez également effectuer un vidage de tas via jvisualvm . Vous pouvez vous connecter à la machine distante via jmx ou jstatd . Vous pouvez faire un heapdump et le stocker sur la machine distante.

Pour analyser les heapdumps peut vous conseiller: MAT . Outil très puissant qui vous permet de comprendre rapidement les problèmes. Vous pouvez trouver ici bon inro au MAT.


Si vous ne voulez pas arrêter l'application pendant longtemps, vous pouvez faire un vidage binaire ( vous pouvez utiliser gcore ou gdb ). Et vous pouvez tilisez jmap pour analyser le vidage gdb . Plus d'informations que vous pouvez lire sur le blog atlassian . Méfiez-vous de certainsproblèmes .

21
Taky

Outre le bouton "Dump heap" de jvisualvm, il est également possible d'utiliser l'interface JMX. De cette façon, vous pouvez même spécifier où stocker le vidage.

connectez-vous au serveur JMX de Tomcat en utilisant jconsole ou jvisualvm avec le plug-in JMX. Puis je suis arrivé à com.Sun.management -> HotSpotDiagnotic -> Operations. À côté de dumpHeap, remplissez les deux paramètres. De la documentation d'Oracle (voir ici ):

Paramètres:

outputFile - le nom de fichier dépendant du système

en direct - si vrai vidage uniquement les objets vivants, c'est-à-dire les objets accessibles aux autres

Appuyez ensuite sur dumpHeap et observez le VM gel pendant un certain temps lors de l'écriture du vidage.

5
piet.t

Je recommande visuel VM http://visualvm.Java.net/ C'est un outil tout-en-un qui peut se connecter à Tomcat, créer et lire le vidage de tas, crée vidage de thread, cpu et échantillonneur de mémoire.

Si vous utilisez un nouveau jdk 1.7, VisualVM est déjà inclus dans votre dossier jdk.

1
Alireza Fattahi