问题:
在使用 java-1.8.0-openjdk 环境查看 JVM 使用情况的时候, 遇到了如下报错:
- 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:157)
- 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:50)
- ... 6 more
解决:
经过多方查询找到了原因: 这里 - heap 参数会调用用到了 sun.jvm 下的 debug 包, 而默认 openJDK 的安装中不包含!
解决方法:
下载并安装一个 java-openjdk-debug 插件! 而且需要和 openjdk 小版本也一致!!!
下载地址: http://debuginfo.centos.org/7/x86_64/
查看系统自身的 openjdk 版本:
这里我因为找不到和小版本一致的安装包, 因此首先就将其卸载了 (蛇皮操作)!!
- yum -y erase java-1.8.0-openjdk-devel-1.8.0.201.b09-2.el7_6.x86_64
- yum -y erase java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64
然后选择能够找到 findbug 的版本安装:
- yum -y install java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64
- yum -y install java-1.8.0-openjdk-devel-1.8.0.191.b12-1.el7_6.x86_64
下载并安装对应版本的 findbugs 插件:
- wget http://debuginfo.centos.org/7/x86_64/java-1.8.0-openjdk-debuginfo-1.8.0.191.b12-1.el7_6.x86_64.rpm
- rpm -ivh java-1.8.0-openjdk-debuginfo-1.8.0.191.b12-1.el7_6.x86_64.rpm
安装完成后成功解决报错问题!!!
来源: http://www.bubuko.com/infodetail-2995146.html