Java 使用JMAP获取heapdump时出现异常
当我使用 jmap-F-dump:format=b,file=/tmp/heapdump/before.hprof 10737Java 使用JMAP获取heapdump时出现异常,java,exception,jmap,Java,Exception,Jmap,当我使用 jmap-F-dump:format=b,file=/tmp/heapdump/before.hprof 10737 Attaching to process ID 10737, please wait... Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Attaching to process ID 10737, please wait...
Exception in thread "main" java.lang.reflect.InvocationTargetException
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)
Caused by: java.lang.RuntimeException: Type "nmethodBucket*", referenced in VMStructs::localHotSpotVMStructs in the remote VM, was not present in the remote VMStructs::localHotSpotVMTypes table (should have been caught in the debug build of that VM). Can not continue.
at sun.jvm.hotspot.HotSpotTypeDataBase.lookupOrFail(HotSpotTypeDataBase.java:361)
at sun.jvm.hotspot.HotSpotTypeDataBase.readVMStructs(HotSpotTypeDataBase.java:252)
at sun.jvm.hotspot.HotSpotTypeDataBase.<init>(HotSpotTypeDataBase.java:87)
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)
正在附加到进程ID 10737,请稍候。。。
线程“main”java.lang.reflect.InvocationTargetException中出现异常
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于sun.tools.jmap.jmap.runTool(jmap.java:179)
位于sun.tools.jmap.jmap.main(jmap.java:110)
原因:java.lang.RuntimeException:类型“nmethodBucket*”,在远程VM中的VMStructs::localHotSpotVMStructs中引用,在远程VMStructs::localHotSpotVMTypes表中不存在(应该在该VM的调试生成中捕获)。无法继续。
位于sun.jvm.HotSpotTypeDataBase.lookupOrFail(hostpottypedatabase.java:361)
位于sun.jvm.HotSpotTypeDataBase.readVMStructs(hostpottypedatabase.java:252)
位于sun.jvm.HotSpotTypeDataBase。(hostpottypedatabase.java:87)
位于sun.jvm.hotspot.bugspot.BugSpotAgent.setupVM(BugSpotAgent.java:568)
位于sun.jvm.hotspot.bugspot.BugSpotAgent.go(BugSpotAgent.java:494)
位于sun.jvm.hotspot.bugspot.BugSpotAgent.attach(BugSpotAgent.java:332)
位于sun.jvm.hotspot.tools.Tool.start(Tool.java:163)
位于sun.jvm.hotspot.tools.HeapDumper.main(HeapDumper.java:77)
有人知道如何解决这个问题吗?我看到了相同的错误,因为我到jmap的路径与到java进程的路径不同(即,针对两个不同的版本)
用我的JDK的完整路径运行jmap解决了这个问题。如果使用OpenJDK,则需要安装debuginfo包 在Centos中,这与 -
sudo debuginfo安装java-1.8.0-openjdk
-或者sudo-yum安装java-1.8.0-openjdk-debuginfo.x86_64
看
-
-谢谢,我遇到了同样的问题,这是因为我使用了不同的jdk版本来运行jmap。我看到了这个错误,尽管只安装了一个jdk,并且与流程使用的相同。