kubernates中使用jvm 工具

项目中出现OOM,需要在线排查,发现线上的pod不支持jmap等命令,经过排查已解决该问题,现记录如下

1.首先在Dockerfile中要选用一个jdk,而非jre

那么将原

FROM openjdk:8-jre-alpine

改为:

 FROM openjdk:8u191-jdk-alpine3.9

2.这样直接使用,由于java的pid 为1,所以使用jmap,jstack等工具时,会报错:

Unable to get pid of LinuxThreads manager thread

尝试了很多办法,最后靠使用tini解决的
首先制作一个含tini的镜像

FROM openjdk:8u191-jdk-alpine3.9
RUN apk add --no-cache tini 
ENTRYPOINT ["tini”]

将该镜像推到自己的仓库,并命名,如:

openjdk:8u191-jdk-alpine3.9-with-tini

3.在自己的业务Dockerfile中使用该镜像,并修改启动命令,如下

FROM registry.cn-hangzhou.aliyuncs.com/xxxx/java:8u191-jdk-alpine3.9-tini

#其他命令

ADD *.war app.war
#注释旧的启动命令
#ENTRYPOINT ["./entrypoint.sh"]
ENTRYPOINT ["/sbin/tini", "--","./entrypoint.sh"]

EXPOSE 8082

4.启动可执行jmap等命令

jmap -dump:format=b,file=heapdump.phrof pid

得到hprof文件

5.从宿主机使用命令将文件从容器内部拷出来,当然你挂在目录也是可以的

kubectl cp podname:目录/文件 ./文件 -n namespace

6.使用命令将文件从宿主机下载到本地

sz ./heapdump.phrof

7.使用本机的jvisualvm 载入分析

完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值