1: 进入容器
docker exec -it 容器id/容器名称 sh
jps 查看jar进程编号, 此时默认为1, 1-5 为liunx进程编号, jmap或者 jstack 进程id无法获取
错误如下图所示:
解决方法:
docker-compose 添加参数: pid: "host"
将PID设置为主机PID模式, 跟随主机系统共享进程命名空间
k8s 中为 hostPID: true
如下图所示:
docker-compose 添加参数后, 重新部署此服务
docker-compose stop management
docker-compose rm management
docker-compose up -d management
服务重新部署后进入容器查看:
命令生成堆文件:
jmap -dump:live,format=b,file=m.hprof PID
jmap -dump:live,format=b,file=m.hprof 59229
生成的文件如下图所示
将容器内的文件copy到宿主机:
docker cp -a docker_management_1:/root/m.hprof /dump/
容器名称: docker_management_1
容器内文件存储路径及文件名:/root/m.hprof
宿主机存储路径: /dump/, 此文件夹为自己新建
如下图所示:
下一步就将此文件下载, 使用 Memory Analyzer 工具进行dump文件的分析了
Memory Analyzer 大概介绍:JVM故障分析及性能优化实战(VI)——JVM Heap Dump(堆转储文件)的生成和MAT的使用 - 云+社区 - 腾讯云