问题采取Java堆转储

时间:2017-07-30 02:20:44

标签: java memory-leaks jvm heap-dump

我正在尝试使用java堆转储来帮助调查内存泄漏。每当我使用它时:

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

堆转储文件达到大约16,048 kb并停止增长,jmap将永远运行并且不会停止,除非我将其杀死。或者我尝试使用它:

jcmd 29498 -F GC.heap_dump heapdump.hprof

但是因为我是从root执行它,并且该进程是从另一个用户运行的,所以我得到了这个:

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)

所以我想我的问题是我做错了什么,以及在尝试获得这个堆转储时最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

要在使用jcmd时解决错误,可以尝试添加此答案中提到的jvm参数: com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded

如果您使用Linux,另一种可能性是使用此处概述的gdb工具: https://www.atlassian.com/blog/archives/so-you-want-your-jvms-heap