使用 jmap 命令时获取 VMVersionMismatchException
Get VMVersionMismatchException when using jmap command
我的 jdk 版本是 1.8。0_111 我正在阅读一本关于 JVM 的书。当我尝试命令 jmap -F 6469
时,抛出如下异常:
Attaching to process ID 6469, please wait...
Error attaching to process: sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 25.111-b14. Target VM is 25.152-b11
sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 25.111-b14. Target VM is 25.152-b11
at sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.java:435)
at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:305)
at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:140)
at sun.jvm.hotspot.tools.Tool.start(Tool.java:185)
at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
at sun.jvm.hotspot.tools.PMap.main(PMap.java:72)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.tools.jmap.JMap.runTool(JMap.java:201)
at sun.tools.jmap.JMap.main(JMap.java:130)
Caused by: sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 25.111-b14. Target VM is 25.152-b11
at sun.jvm.hotspot.runtime.VM.checkVMVersion(VM.java:227)
at sun.jvm.hotspot.runtime.VM.<init>(VM.java:294)
at sun.jvm.hotspot.runtime.VM.initialize(VM.java:370)
at sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.java:431)
... 11 more
我的jvm版本好像有问题,但我找不到原因。我是 JVM 的新手,如果有人能告诉我为什么以及如何处理它,我将不胜感激。
目标进程 (6469) 在不同版本的 JRE (1.8.0_152) 下运行。
当运行jmap
或jstack
处于强制模式(-F)时,JDK工具版本必须与JDK完全相同目标进程。
详情见this answer。
更改 java 路径后,我在 ubuntu 上解决了这个问题。
编辑java路径
sudo gedit /etc/profile
更改java路径
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
(设置您正在使用的 java 版本的 java 路径)
重启系统。
在 Windows 上可以使用 psexec
所以我们不必使用 -F
选项。因此,您不必为 jhat
和 java 进程使用完全相同的 jdk 版本。
当没有相同版本的 jdk 时,这很有用。例如,在一个更大的组织中,有时人们只更新 jvm,但不在生产系统上安装相同的 jdk。
psexec
是 PsTools
捆绑包的一部分。您可以找到它们 here。命令如下所示:
F:\Programs\PSTools\PsExec.exe -s jmap.exe <pid>
即使使用 psexec,也可能需要足够的权限。
我的 jdk 版本是 1.8。0_111 我正在阅读一本关于 JVM 的书。当我尝试命令 jmap -F 6469
时,抛出如下异常:
Attaching to process ID 6469, please wait...
Error attaching to process: sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 25.111-b14. Target VM is 25.152-b11
sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 25.111-b14. Target VM is 25.152-b11
at sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.java:435)
at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:305)
at sun.jvm.hotspot.HotSpotAgent.attach(HotSpotAgent.java:140)
at sun.jvm.hotspot.tools.Tool.start(Tool.java:185)
at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
at sun.jvm.hotspot.tools.PMap.main(PMap.java:72)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.tools.jmap.JMap.runTool(JMap.java:201)
at sun.tools.jmap.JMap.main(JMap.java:130)
Caused by: sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 25.111-b14. Target VM is 25.152-b11
at sun.jvm.hotspot.runtime.VM.checkVMVersion(VM.java:227)
at sun.jvm.hotspot.runtime.VM.<init>(VM.java:294)
at sun.jvm.hotspot.runtime.VM.initialize(VM.java:370)
at sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.java:431)
... 11 more
我的jvm版本好像有问题,但我找不到原因。我是 JVM 的新手,如果有人能告诉我为什么以及如何处理它,我将不胜感激。
目标进程 (6469) 在不同版本的 JRE (1.8.0_152) 下运行。
当运行jmap
或jstack
处于强制模式(-F)时,JDK工具版本必须与JDK完全相同目标进程。
详情见this answer。
更改 java 路径后,我在 ubuntu 上解决了这个问题。
编辑java路径
sudo gedit /etc/profile
更改java路径
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
(设置您正在使用的 java 版本的 java 路径)
重启系统。
在 Windows 上可以使用 psexec
所以我们不必使用 -F
选项。因此,您不必为 jhat
和 java 进程使用完全相同的 jdk 版本。
当没有相同版本的 jdk 时,这很有用。例如,在一个更大的组织中,有时人们只更新 jvm,但不在生产系统上安装相同的 jdk。
psexec
是 PsTools
捆绑包的一部分。您可以找到它们 here。命令如下所示:
F:\Programs\PSTools\PsExec.exe -s jmap.exe <pid>
即使使用 psexec,也可能需要足够的权限。