当前位置: 首页 > 知识库问答 >
问题:

问题Java堆转储

林浩漫
2023-03-14

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

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

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

jcmd 29498 -F GC.heap_dump heapdump.hprof

但由于我是从根目录执行它的,并且该过程是从另一个用户运行的,因此我得到了以下结果:

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个答案

杨晟
2023-03-14

为了避免使用jcmd时出现的错误,可以尝试添加这个答案中提到的jvm参数:com。太阳工具。贴上AttachNotSupportedException:无法打开套接字文件:目标进程没有响应或热点VM没有加载

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

 类似资料:
  • 问题内容: 我有两组活动,假设每组3个活动,(A1,B1,C1 || A2,B2,C2)我从A1启动我的App,然后-> B1-> C1在这里我想从C1跳到-> A2在A2处,如果我按回去,它应该存在该应用程序,而不是退回给C1,然后从A2导航到-> B2-> C2。 因此,基本上我想更改启动的Activity,就像我在一个App中有两个App,而当我切换到第二个App时,我必须清除Activit

  • 我正在经历内存泄漏,这里有一些细节。 在泄漏后, null null 我很惊讶顶部、堆转储大小和实际堆大小之间的差异。我猜测top和heap之间的区别是垃圾收集器堆和本地堆区域的可能性。但是,为什么堆转储文件大小和实际堆大小(来自eclipse MAT analyzer)会不同呢? 对这个问题有什么见解吗? 更新/回答 一些建议是使用jcmd(https://docs.oracle.com/jav

  • 日安!我正在使用堆栈实现一个内缀到后缀转换器。当用户输入一个没有括号的内插表达式时,它可以工作;但是当存在括号时,控制台说: 我的问题是在实现排名(堆栈的顶部)。

  • 问题内容: 我在标准Windows命令窗口中有一个正在运行的Java进程。即我已经运行’cmd’并在java -jar中键入… 我需要尽可能获得所有线程的完整堆栈转储。 我记得在Linux下,您可以通过quit命令上的选项将消息发送到JVM。 在此文件中为太阳状态 若要在Windows 95或Windows NT平台上生成堆栈跟踪,请在运行Java程序的窗口中输入键序列,或单击窗口上的“关闭”按钮

  • 我正在做关于java编程的小练习。 基本上,该应用程序允许用户输入华氏温度并显示摄氏当量,或输入摄氏温度并显示华氏当量。该应用程序包括一个摄氏度方法,返回相当于华氏温度的摄氏度。该应用程序还包括一个华氏度方法,该方法返回相当于摄氏度的华氏度。 以下是我的完整代码: 好消息是包括方法在内的代码正在工作。用户可以输入选择1或2,然后输入温度数字并以摄氏度或华氏度显示。但如果用户输入选择3,程序将显示“