1, 查看JVM进程
# jps
-----------------------------
11921 WrapperSimpleApp
4082 Jps
9768 QuorumPeerMain
10363 Bootstrap
直接使用 jsp 命令, 会发现, 在top 命令中 很多的java 进程并不存在,
#top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20884 root 20 0 6087220 1.5g 3540 S 5.3 9.8 51:02.64 java
我们直接使用
# jmap -dump:live,format=b,file=heap.hprof 20884
---------------------------------
20884: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding
会告诉我们 jvm 无法加载, 怎么办呢?
1.1 进入 docker 使用 jps
# docker exec -it 容器id /bin/bash
# jps
---------------------------------
1 hello.jar
718 Jps
再使用dump
jmap -dump:live,format=b,file=/heap.hprof [pid]
# jmap -dump:live,format=b,file=/heap.hprof 1
--------------
Dumping heap to /heap.hprof ...
Heap dump file created
提示创建成功!
2, 分析
先把文件从docker 中 拷贝出来, 这个地方要注意, 换成你自己的hprof 文件所在目录
# docker cp 容器id:/app/dump/ /app/home/dump
# /app/dump/ 是hprof 文件所在的目录
# /app/home/dump 是主机目录
2.1 命令行分析
# jhat heap.hprof
Reading from heap.hprof...
Dump file created Fri Oct 30 09:14:16 CST 2020
Snapshot read, resolving...
会创建一个 端口为 7000 的 html 页面, 访问即可分析
2.2 jdk 界面分析
想办法搞远程下载下来
jvisualvm.exe
打开 heap.hprof 文件即可