安装
||▶ 查看jdk版本信息
||▶ 查看可用版本:yum -y whatprovides '*/jmap'
||▶ 选择匹配的版本:yum install -y java-1.8.0-openjdk-devel-1.8.0.342.b07-1.el7_9.x86_64
||▶ 验证:jmap
报错处理
【问题描述】
jmap -heap <PID>
报错
Attaching to process ID 9323, please wait...
Error attaching to process: Doesn't appear to be a HotSpot VM (could not find symbol "gHotSpotVMTypes" in remote process)
sun.jvm.hotspot.debugger.DebuggerException: Doesn't appear to be a HotSpot VM (could not find symbol "gHotSpotVMTypes" in remote process)
at sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.java:412)
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.HeapSummary.main(HeapSummary.java:50)
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)
▪ 原因&措施
§ docker 为了安全默认关闭了 SYS_PTRACE 功能
✔ java应用没有重新启动
§ docker 为了安全默认关闭了 SYS_PTRACE 功能
✔ 执行docker run --cap-add=SYS_PTRACE -d -p 8088:8080 francis666:latest
或 docker run --privileged -d -p 8088:8080 francis666:latest
✔ 对运行中的docker,进入容器:docker exec -ti --privileged <容器id> bash
▪ 原因&措施
§ OpenJDK 1.8的版本较低;
执行yum -y install java-1.8.0-openjdk-devel.x86_64
后安装的是 OpenJDK 1.8 较高版本的包,下载下来的版本号和 jdk 的版本号不一致,而且执行完后覆盖了原低版本 jdk 的安装目录
导致jps、jinfo、jmap 等命令能用,但是执行会报此错
✔ 下载 java-1.8.0-openjdk-devel 时保证和 jdk 的小版本号完全一致,可以先从阿里镜像库下载对应 rpm 包,如: ·java-1.8.0-openjdk-devel-1.8.0.191.b12-0.el7_5.x86_64.rpm·,然后通过 rpm -ivh java-1.8.0-openjdk-devel-1.8.0.191.b12-0.el7_5.x86_64.rpm
安装