当前位置: 首页 > 面试题库 >

Jmap无法连接以进行转储

程凯定
2023-03-14
问题内容

我们有一个应用的公开测试版,偶尔会导致堆空间溢出。JVM通过休假来做出反应。

为了分析这一点,我想在内存出现故障的时候查看一下。Java不想让我这样做。该进程仍在内存中,但似乎未被视为Java进程。

有问题的服务器是Debian Lenny服务器Java 6u14

/opt/jdk/bin# ./jmap -F -dump:format=b,file=/tmp/apidump.hprof 11175
Attaching to process ID 11175, please wait...
sun.jvm.hotspot.debugger.NoSuchSymbolException: Could not find symbol "gHotSpotVMTypeEntryTypeNameOffset" in any of the known library names (libjvm.so, libjvm_g.so, gamma_g)
at sun.jvm.hotspot.HotSpotTypeDataBase.lookupInProcess(HotSpotTypeDataBase.java:390)
at sun.jvm.hotspot.HotSpotTypeDataBase.getLongValueFromProcess(HotSpotTypeDataBase.java:371)
at sun.jvm.hotspot.HotSpotTypeDataBase.readVMTypes(HotSpotTypeDataBase.java:102)
at sun.jvm.hotspot.HotSpotTypeDataBase.<init>(HotSpotTypeDataBase.java:85)
at sun.jvm.hotspot.bugspot.BugSpotAgent.setupVM(BugSpotAgent.java:568)
at sun.jvm.hotspot.bugspot.BugSpotAgent.go(BugSpotAgent.java:494)
at sun.jvm.hotspot.bugspot.BugSpotAgent.attach(BugSpotAgent.java:332)
at sun.jvm.hotspot.tools.Tool.start(Tool.java:163)
at sun.jvm.hotspot.tools.HeapDumper.main(HeapDumper.java:77)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.tools.jmap.JMap.runTool(JMap.java:179)
at sun.tools.jmap.JMap.main(JMap.java:110)
Debugger attached successfully.
sun.jvm.hotspot.tools.HeapDumper requires a java VM process/core!

问题答案:

解决方案非常简单。我以root用户身份运行jmap,但必须以启动jvm的用户身份运行它。我现在要羞愧地隐藏我的头。



 类似资料:
  • 问题内容: 我必须运行才能进行进程的堆转储。但返回: 所以我用了: 使用 可以进行堆转储吗? 我正在等待20分钟,尚未完成。有什么想法吗? 问题答案: vs. 以及vs. 使用完全不同的机制与目标JVM通信。 jmap / jstack 在没有这些工具的情况下运行时,请使用动态附加机制。其工作原理如下。 连接到Java进程1234之前,请在目标进程的工作目录或处创建一个文件。 然后发送到目标进程。

  • 我必须运行以便对我的进程进行堆转储。但是返回: 所以我用了: 使用可以进行堆转储吗

  • 因此,当我在网上搜索时,我发现一些人有类似的问题,但没有解决办法。有人对这个问题有所了解吗? 也许是天线和Android4.0之间的可压缩性问题。我不认为错误是在我的代码中,因为正如我所说的,相同的代码在旧的android版本上运行得很完美。

  • 我在通过html vscode调试连接到chrome时遇到问题。每次我进入运行菜单并点击“开始调试”或“不调试运行”,谷歌chrome都会打开并显示新选项卡,而不是我正在调试的文件。当我返回vscode时,我发现调用堆栈是空的。我还尝试过使用文件。我以前从未遇到过这个问题。我能够在没有chrome调试器扩展(现已弃用)的情况下用chrome调试html。我不知道为什么我现在会有这些问题。请有人帮我

  • 问题内容: 我必须运行才能进行进程的堆转储。但返回: 所以我用了: 使用 可以进行堆转储吗? 我正在等待20分钟,尚未完成。有什么想法吗? 问题答案: jmapvs. jmap -F以及jstackvs. jstack -F使用完全不同的机制与目标JVM通信。 jmap / jstack 在没有这些工具的情况下运行时,请使用动态附加机制。其工作原理如下。 连接到进程1234之前,请在目标进程的工作

  • 我试图通过VSCode(在WSL上启动)远程连接到服务器(在Ubuntu16.04.7LTS上运行)。 已经尝试按照这里的建议远程手动设置vscode服务器 提前感谢您的帮助!