docker运行java程序 使用jmap,jstack命令 tini运行的程序获取进程

使用docker进行部署java程序,过程中会遇到一些问题,首先对docker要有一个基本的了解

初学可以把docker当成一个linux中的虚拟机

我们这里采用的是alpine系统

想要对docker中的java程序使用java的一些命令,首先java程序要使用tini托管的方式进行运行,默认java程序会使用1进程,1号负责执行内核的部分初始化工作及进 行系统配置,并创建若干个用于高速缓存和虚拟主存管理的内核线程,java的一些命令(jmap,jstack...)是无法使用到1进程的

tini使用方法

在制做镜像时在dockerfile中加入以下命令,此命令还解决时区问题

FROM wehkamp/jre:8.212.04-r0_02
VOLUME /tmp
ENV TZ=Asia/Shanghai
RUN echo "http://mirrors.aliyun.com/alpine/v3.8/main/" > /etc/apk/repositories
RUN echo "http://mirrors.aliyun.com/alpine/v3.8/community/" >> /etc/apk/repositories
RUN apk update
RUN apk add --no-cache tzdata
RUN apk add --no-cache tini
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ADD admin.jar app.jar
ENTRYPOINT tini java -Djava.security.egd=file:/dev/./urandom  -jar -Xms1024m -Xmx2048m /app.jar

此时运行的java程序在docker一般为6

这个时候就可以正常使用java的一些内置命令了,如果镜像中没有这些命令,可以自己在docker进行安装

cd /etc/apk
vi repositories
替换成阿里源
http://mirrors.aliyun.com/alpine/v3.8/main/
http://mirrors.aliyun.com/alpine/v3.8/community/
2、apk update
3、apk add openjdk8
4、cd /usr/lib/jvm/java-1.8-openjdk/bin
5、./jstack  ||  ./jmap
6、./jmap -dump:live,format=b,file=dump20191028.hprof pid

有时候并不想获取到这么细,其实docker的进程在物理系统中也时存在对应进程的,不过,一个java程序会有两个大进程,会有所属关系,tini--》java--》java子进程

docker ps | grep java程序

docker inspect -f '{{.State.Pid}}' 容器id

pstree -p pid

这样就可以查看对应的进程树,不过对进程是无法使用java的一些命令的

当然还可以直接使用命令,查看docker使用资源情况

docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" | grep java程序

这样会动态的打印资源使用情况,可以根据自己需求加入其它指标

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值