如何解决Linux环境下使用jinfo命令和jmap命令时出现的异常
异常描述:
最近在Deepin系统、openjdk-8环境下执行 jinfo 18310 和 jmap -heap 25151 查看jvm内部相关信息时出现异常。
异常信息如下:
david@UX501:~$ jinfo 18310
Attaching to process ID 18310, please wait...
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
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
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.JInfo.main(JInfo.java:138)
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.jinfo.JInfo.runTool(JInfo.java:108)
at sun.tools.jinfo.JInfo.main(JInfo.java:76)
Caused by: java.lang.RuntimeException: can't determine target's VM version : field "_reserve_for_allocation_prefetch" not found in type Abstract_VM_Version
at sun.jvm.hotspot.runtime.VM.<init>(VM.java:291)
at sun.jvm.hotspot.runtime.VM.initialize(VM.java:370)
at sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.java:431)
... 11 more
david@UX501:~$ jmap -heap 25151
Attaching to process ID 25151, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.212-b01
using thread-local object allocation.
Parallel GC with 8 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 20971520 (20.0MB)
NewSize = 6815744 (6.5MB)
MaxNewSize = 6815744 (6.5MB)
OldSize = 14155776 (13.5MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
Exception in thread "main" java.lang.reflect.InvocationTargetException
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: java.lang.RuntimeException: unknown CollectedHeap type : class sun.jvm.hotspot.gc_interface.CollectedHeap
at sun.jvm.hotspot.tools.HeapSummary.run(HeapSummary.java:144)
at sun.jvm.hotspot.tools.Tool.startInternal(Tool.java:260)
at sun.jvm.hotspot.tools.Tool.start(Tool.java:223)
at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
at sun.jvm.hotspot.tools.HeapSummary.main(HeapSummary.java:49)
... 6 more
可能原因:
- 缺少Debug相关的软件环境。
- Debug环境版本和JDK没有对应。
解决办法:
- 查看jdk版本:
david@UX501:~$ java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-8u212-b01-1~deb9u1-b01)
OpenJDK 64-Bit Server VM (build 25.212-b01, mixed mode)
- 安装对应的debug软件:
david@UX501:~$ sudo apt-get install openjdk-8-dbg
[sudo] david 的密码:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列【新】软件包将被安装:
openjdk-8-dbg
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 113 个软件包未被升级。
需要下载 1,860 kB 的归档。
解压缩后会消耗 6,240 kB 的额外空间。
获取:1 https://community-packages.deepin.com/deepin apricot/main amd64 openjdk-8-dbg amd64 8u212-b01-1~deb9u1 [1,860 kB]
已下载 1,860 kB,耗时 9秒 (206 kB/s)
正在选中未选择的软件包 openjdk-8-dbg:amd64。
(正在读取数据库 ... 系统当前共安装有 209220 个文件和目录。)
准备解压 .../openjdk-8-dbg_8u212-b01-1~deb9u1_amd64.deb ...
正在解压 openjdk-8-dbg:amd64 (8u212-b01-1~deb9u1) ...
正在设置 openjdk-8-dbg:amd64 (8u212-b01-1~deb9u1) ...
david@UX501:~$
- 重新执行命令进行测试,结果正常
david@UX501:~$ jinfo 25151
Attaching to process ID 25151, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.212-b01
Java System Properties:
java.runtime.name = OpenJDK Runtime Environment
java.vm.version = 25.212-b01
sun.boot.library.path = /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64
java.vendor.url = http://java.oracle.com/
java.vm.vendor = Oracle Corporation
path.separator = :
file.encoding.pkg = sun.io
java.vm.name = OpenJDK 64-Bit Server VM
sun.os.patch.level = unknown
sun.java.launcher = SUN_STANDARD
user.country = CN
user.dir = /home/david/IdeaProjects/untitled
java.vm.specification.name = Java Virtual Machine Specification
java.runtime.version = 1.8.0_212-8u212-b01-1~deb9u1-b01
java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
os.arch = amd64
java.endorsed.dirs = /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/endorsed
java.io.tmpdir = /tmp
line.separator =
java.vm.specification.vendor = Oracle Corporation
os.name = Linux
sun.jnu.encoding = UTF-8
java.library.path = /usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib
java.specification.name = Java Platform API Specification
java.class.version = 52.0
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
os.version = 5.3.0-3-amd64
user.home = /home/david
user.timezone = GMT+08:00
java.awt.printerjob = sun.print.PSPrinterJob
file.encoding = UTF-8
java.specification.version = 1.8
user.name = david
java.class.path = /usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/charsets.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/dnsns.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/icedtea-sound.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/jaccess.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/java-atk-wrapper.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/localedata.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/nashorn.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunec.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/zipfs.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/jce.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/jsse.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/management-agent.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/resources.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/rt.jar:/home/david/IdeaProjects/untitled/out/production/untitled:/home/david/SoftWare/IDEA/lib/idea_rt.jar
java.vm.specification.version = 1.8
sun.arch.data.model = 64
sun.java.command = Test arg1
java.home = /usr/lib/jvm/java-8-openjdk-amd64/jre
user.language = zh
java.specification.vendor = Oracle Corporation
awt.toolkit = sun.awt.X11.XToolkit
java.vm.info = mixed mode
java.version = 1.8.0_212
java.ext.dirs = /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext:/usr/java/packages/lib/ext
sun.boot.class.path = /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/resources.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jsse.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jce.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/charsets.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jfr.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/classes
java.vendor = Oracle Corporation
file.separator = /
java.vendor.url.bug = http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding = UnicodeLittle
sun.cpu.endian = little
sun.desktop = gnome
sun.cpu.isalist =
VM Flags:
Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=20971520 -XX:MaxHeapSize=20971520 -XX:MaxNewSize=6815744 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=6815744 -XX:OldSize=14155776 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
Command line: -Xms20M -Xmx20M -javaagent:/home/david/SoftWare/IDEA/lib/idea_rt.jar=40987:/home/david/SoftWare/IDEA/bin -Dfile.encoding=UTF-8
david@UX501:~$
david@UX501:~$ jmap -heap 25151
Attaching to process ID 25151, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.212-b01
using thread-local object allocation.
Parallel GC with 8 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 20971520 (20.0MB)
NewSize = 6815744 (6.5MB)
MaxNewSize = 6815744 (6.5MB)
OldSize = 14155776 (13.5MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 5767168 (5.5MB)
used = 2491096 (2.3756942749023438MB)
free = 3276072 (3.1243057250976562MB)
43.1944413618608% used
From Space:
capacity = 524288 (0.5MB)
used = 491552 (0.468780517578125MB)
free = 32736 (0.031219482421875MB)
93.756103515625% used
To Space:
capacity = 524288 (0.5MB)
used = 0 (0.0MB)
free = 524288 (0.5MB)
0.0% used
PS Old Generation
capacity = 14155776 (13.5MB)
used = 6099008 (5.81646728515625MB)
free = 8056768 (7.68353271484375MB)
43.08494285300926% used
2212 interned Strings occupying 156000 bytes.
david@UX501:~$
- 为了搞清楚问题是否确实是因为缺少debug环境所致,将刚才安装的openjdk-8-dbg移除,重新进行测试,结果异常又出现了,说明猜想确实没错。(也可能是debug环境版本没有对应)
david@UX501:~$ sudo apt-get remove openjdk-8-dbg
[sudo] david 的密码:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包将被【卸载】:
openjdk-8-dbg
升级了 0 个软件包,新安装了 0 个软件包,要卸载 1 个软件包,有 113 个软件包未被升级。
解压缩后将会空出 6,240 kB 的空间。
您希望继续执行吗? [Y/n] y
(正在读取数据库 ... 系统当前共安装有 209388 个文件和目录。)
正在卸载 openjdk-8-dbg:amd64 (8u212-b01-1~deb9u1) ...
david@UX501:~$ jinfo 25151
Attaching to process ID 25151, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.212-b01
Java System Properties:
Exception in thread "main" java.lang.reflect.InvocationTargetException
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.jinfo.JInfo.runTool(JInfo.java:108)
at sun.tools.jinfo.JInfo.main(JInfo.java:76)
Caused by: java.lang.InternalError: Metadata does not appear to be polymorphic
at sun.jvm.hotspot.types.basic.BasicTypeDataBase.findDynamicTypeForAddress(BasicTypeDataBase.java:278)
at sun.jvm.hotspot.runtime.VirtualBaseConstructor.instantiateWrapperFor(VirtualBaseConstructor.java:102)
at sun.jvm.hotspot.oops.Metadata.instantiateWrapperFor(Metadata.java:68)
at sun.jvm.hotspot.memory.SystemDictionary.getSystemKlass(SystemDictionary.java:127)
at sun.jvm.hotspot.runtime.VM.readSystemProperties(VM.java:879)
at sun.jvm.hotspot.runtime.VM.getSystemProperties(VM.java:873)
at sun.jvm.hotspot.tools.SysPropsDumper.run(SysPropsDumper.java:44)
at sun.jvm.hotspot.tools.JInfo$1.run(JInfo.java:79)
at sun.jvm.hotspot.tools.JInfo.run(JInfo.java:94)
at sun.jvm.hotspot.tools.Tool.startInternal(Tool.java:260)
at sun.jvm.hotspot.tools.Tool.start(Tool.java:223)
at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
at sun.jvm.hotspot.tools.JInfo.main(JInfo.java:138)
... 6 more
david@UX501:~$
如果使用的是CentOS,则可以用类似的方法解决
- 同样先查看jdk版本
- 到这里下载对应安装包或直接安装对应版本的软件包。

sudo debuginfo-install java-1.8.0-openjdk
或者
sudo yum install java-1.8.0-openjdk-debuginfo.x86_64
- 未经授权,禁止转载
9547



被折叠的 条评论
为什么被折叠?



