2016-07-06 1 views
0

Nous utilisons oracle jvm 1.8 64bit dans linux.Existe-t-il une méthode de ligne de commande pour obtenir un vidage de tas jvm en plus de jmap?

Nous savons jmap peut obtenir dump tas jvm:

jmap -F -dump:format=b,file=***filepath*** ***pid*** 

Mais il est lent.

Nous savons qu'avec JVisualVM et JConsole se connecter à JMX peut également obtenir un vidage de tas, et c'est très rapide. Mais ils sont avec GUI.

Cependant, dans notre environnement de produit, il n'y a pas d'interface graphique. Et aucune machine avec interface graphique ne peut accéder à cet environnement.

Donc, notre question est - Est-ce que JVisualVM et JConsole peuvent supporter une ligne de commande pour faire un vidage de tas? Ou Existe-t-il une méthode de ligne de commande pour obtenir un vidage de tas jvm en plus de jmap?

Nous avons essayé aujourd'hui -

1, en utilisant jvisualvm JMX (à distance), nous pouvons obtenir tas de vidage avec succès

2, en utilisant jmap sans option -F, la décharge a échoué:

[racine @ panda01 ~] # jmap -dump: format = b, file =/tmp/heapdump.31941.hprof 31941

31941: Impossible d'ouvrir le fichier socket: processus cible ne répond pas ou VM HotSpot non chargé

L'option -F peut être utilisé lorsque le processus cible ne répond pas

3, en utilisant jmap avec option -F, la décharge avec succès, mais lent:

[root @ panda01 ~] # jmap -F -dump: format = b, file =/tmp/heapdump.31941.hprof 31941

Fixation pour traiter ID 31941, s'il vous plaît patienter ...

Debugger attaché avec succès.

Le compilateur de serveur a été détecté.

version JVM est 25,92-b14

tas de dumping à /tmp/heapdump.31941.hprof ...

fichier de vidage Heap créé

Et nous remarquons le résultat (2 .hprof fichiers). Le vidage de fichier avec jvisualvm (appelé premier vidage) est plus petit que le vidage de fichier avec jmap -F (appelé 2ème vidage). Affichage avec jvisualvm, le nombre d'instances et la taille dans la première image sont beaucoup moins que ceux de la 2ème image.

Répondre

1

Utilisez jmap sans l'option -F - ce sera un moyen plus rapide.

La différence est décrite dans this answer.

Notez que sans -F jmap doit être exécuté sous le même utilisateur/groupe que le processus cible.

+0

Merci! J'ai essayé sans -F avant. Mais il ne génère pas de décharge de tas parfois. –

+0

@ForestSoup Le lien ci-dessus décrit également les raisons pour lesquelles jmap sans -F peut ne pas fonctionner. Cependant, le dumping basé sur JMX nécessite également la coopération de la JVM. Donc, si JVM ne répond pas, ni jmap ni JMX-based dump fonctionneront. – apangin

+0

Nous avons essayé à la fois jmap avec/sans -F et jvisualvm, la différence est collée à la question ci-dessus. @apangin, pourriez-vous, s'il vous plaît, revoir et commenter? Merci! –