2017-07-30 5 views
1

Je tente d'effectuer un vidage de segments Java pour analyser une fuite de mémoire. Chaque fois que j'utilise ceci:Problème lors de la récupération de segments de mémoire Java

jmap -J-d64 -dump:format=b,file=myheapdump -F 29498 

Le fichier de vidage de tas arrive à environ 16048 kb et cesse de croître, jmap fonctionnera toujours et ne s'arrêtera pas à moins que je le tue. Sinon j'ai essayé d'utiliser ceci:

jcmd 29498 -F GC.heap_dump heapdump.hprof 

Mais depuis que je suis l'exécuter de la racine, et le processus est en cours d'exécution d'un autre utilisateur, je reçois ceci:

com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded 
    at sun.tools.attach.LinuxVirtualMachine.<init>(LinuxVirtualMachine.java:106) 
    at sun.tools.attach.LinuxAttachProvider.attachVirtualMachine(LinuxAttachProvider.java:63) 
    at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:208) 
    at sun.tools.jcmd.JCmd.executeCommandForPid(JCmd.java:147) 
    at sun.tools.jcmd.JCmd.main(JCmd.java:131) 

Je suppose que ma question est ce que est-ce que je fais mal et quelle est la meilleure façon d'aller de l'avant en essayant d'obtenir cette décharge de tas?

+0

Qu'en est-il de lancer 'jmap' (sans -F) à partir du même compte utilisateur que celui utilisé pour exécuter JVM? – apangin

+0

Je reçois une erreur indiquant que l'utilisateur n'a pas la permission – jymbo

+0

Quelle autorisation? Pour créer un fichier de vidage? Essayez un autre répertoire que l'utilisateur a l'autorisation d'écrire. – apangin

Répondre

0

Pour contourner l'erreur lors de l'utilisation jcmd, vous pouvez essayer d'ajouter l'argument jvm mentionné dans cette réponse: com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded

Une autre possibilité si vous utilisez Linux est d'utiliser l'outil gdb comme indiqué ici: https://www.atlassian.com/blog/archives/so-you-want-your-jvms-heap

+0

Ajout cet argument donne une autre erreur: jcmd 17272 -XX: + StartAttachListener GC.heap_dump heapdump. hprof 17272: java.lang.IllegalArgumentException: Commande de diagnostic inconnue – jymbo

+0

@jymbo A partir de ce message d'erreur, vous avez peut-être ajouté l'argument à la commande jcmd elle-même? L'argument devrait être ajouté à la commande java du processus dont vous essayez d'obtenir le cliché, lorsque vous démarrez ce processus – kingdc