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.
Merci! J'ai essayé sans -F avant. Mais il ne génère pas de décharge de tas parfois. –
@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
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! –