无法确定目标的vm版本:在使用jmap或jstat时,字段“\u reserve\u for\u allocation\u prefetch”

30byixjq  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(723)

当我尝试使用jmap、jinfo等并尝试连接到正在运行的jvm时,出现以下错误。
例如

  1. [x@y bin]$ jmap -heap 3848
  2. Attaching to process ID 3848, please wait...
  3. Error attaching to process: java.lang.RuntimeException: can't determine target's VM version : field "_reserve_for_allocation_prefetch" not found in type Abstract_VM_Version
  4. sun.jvm.hotspot.debugger.DebuggerException: java.lang.RuntimeException: can't determine target's VM version : field "_reserve_for_allocation_prefetch" not found in type Abstract_VM_Version
  5. at sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.java:435)
  6. at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:305)
  7. at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:140)
  8. at sun.jvm.hotspot.tools.Tool.start(Tool.java:185)
  9. at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
  10. at sun.jvm.hotspot.tools.HeapSummary.main(HeapSummary.java:50)
  11. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  12. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  13. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  14. at java.lang.reflect.Method.invoke(Method.java:498)
  15. at sun.tools.jmap.JMap.runTool(JMap.java:201)
  16. at sun.tools.jmap.JMap.main(JMap.java:130)
  17. Caused by: java.lang.RuntimeException: can't determine target's VM version : field "_reserve_for_allocation_prefetch" not found in type Abstract_VM_Version
  18. at sun.jvm.hotspot.runtime.VM.<init>(VM.java:291)
  19. at sun.jvm.hotspot.runtime.VM.initialize(VM.java:370)
  20. at sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.java:431)
  21. ... 11 more

有什么问题吗?

jckbn6z7

jckbn6z71#

正在使用的jmap命令的版本可能低于用于生成进程的jdk版本。
首先检查您的jdk版本

  1. java -version

然后,您可以通过计算该pid的启动命令来快速检查jvm的jdk版本。

  1. ps -p {your_jvm_id} -f

输出应该是这样的。

  1. UID PID PPID C STIME TTY TIME CMD
  2. x.y+ 3848 3786 7 Nov18 tty2 20:29:41 /apps/progs/ideaIC-2020.2.3/idea-IC-202.7660.26/jbr/bin/java -classpath /apps/progs/ideaIC-2020.2.3/idea-IC-202.7660.26/lib/bootstrap.jar:/apps/progs/ideaIC-2020.2

在cmd列中,您应该看到用于启动进程的java可执行文件的路径。尝试获取该可执行文件的版本。
例如:

  1. /apps/progs/ideaIC-2020.2.3/idea-IC-202.7660.26/jbr/bin/java -version
  2. openjdk version "11.0.8" 2020-07-14
  3. OpenJDK Runtime Environment JBR-11.0.8.10-944.34-jcef (build 11.0.8+10-b944.34)
  4. OpenJDK 64-Bit Server VM JBR-11.0.8.10-944.34-jcef (build 11.0.8+10-b944.34, mixed mode)

注意两个版本之间的差异

展开查看全部

相关问题