1 问题

Docker打包Java后台服务镜像,启动命令样式为:java -jar ****.jar
在K8S中启动镜像时,启动的PID为1,此时无法通过jmap和jinfo查看JVM相关信息。
配置如下:

# 环境
FROM williamyeh/java8:latest
# 管理者信息
MAINTAINER xindaqi "*******@qq.com"
# 本地文件挂载到容器
WORKDIR /home/xindaqi/project/tutorial
# 拷贝jar文件
COPY tutorial.jar /tutorial.jar
# 设置端口号
EXPOSE 9121
# 运行jar包
ENTRYPOINT ["java", "-jar", "/tutorial.jar", "&"]

2 测试

2.1 查看Pods

kubectl get pods

2.2 进入Pods

pods-name为查到的pods名称

kubectl exec -it pods-name -- /bin/bash

2.3 查看Java进程

jps -l

进程ID为1。
在这里插入图片描述

2.4 查看flags

jinfo -flags 1

没有权限查看PID=1的信息。
在这里插入图片描述

2.5 查看heap信息

jmap -heap 1

同样无法查看。
在这里插入图片描述

3 方案

3.1 通过jstat查看信息

jstat -gccapacity 1

在这里插入图片描述

jstat -gc 1

在这里插入图片描述

3.2 通过java -XX查看

java -XX:+PrintCommandLineFlags -version

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐