背景

Arthas我们都知道是一款深受大家喜爱的功能强大的诊断工具,从GitHub上的star数量就可见一斑,截止我写这篇博客,Arthas在GitHub上的star数量已达19.5k,我的天,真牛批

根据Arthas官方文档,我们可以很快上手其提供的特色诊断功能,不得不说,这对于了解Arthas是十分必要的。但是,在云服务广泛应用的今天,单机或者裸机跑Java应用的时代已慢慢远去,随之而来的是大规模容器化部署的时代,我们诊断的对象由传统机器上跑着的Java应用变为了容器内运行着的Java应用,甚至某些情况下,这些容器服务是无法与外界联网的,属于离线的docker应用。诊断的对象变了,对象所处的环境也变了,那么我们是否就没有办法使用Arthas诊断我们的应用了呢,实则不然,下面我将分别介绍如何将Arthas集成至在线和离线容器中

在线版集成操作步骤

新建制作镜像的文件夹

此处文件夹我命名为了: openjdk8-alpine-arthas
在这里插入图片描述
至于说为何要单独建制作镜像的文件夹,对docker有所了解的同学应该知晓,在此不过多进行赘述

选择基础镜像

关于基础镜像的选择,我选的是 adoptopenjdk/openjdk8:alpine-slim,关于这个镜像,大家可以在Dockerhub上找得到

下载arthas-boot.jar

1、可使用官方提供的下载方式:https://alibaba.github.io/arthas/download.html

2、使用我已上传至百度云盘的jar包

链接: https://pan.baidu.com/s/1SYAqA7w7dw5RuuTHu9JLBg 提取码: d44h

修改Dockerfile文件

新建Dockerfile文件,将下文所给内容复制进去,然后保存

主要就是将arthas-boot.jar拷贝至容器内的某个位置

在这里插入图片描述
文件内容如下:

FROM adoptopenjdk/openjdk8:alpine-slim
 
LABEL maintainer="renhongqiang1397@gmail.com"
 
ENV BASE_PATH='/opt' \
    PRO_PATH='/opt/project'

# copy arthas
COPY arthas/arthas-boot.jar /opt/arthas


RUN set -eux; \
    mkdir -p $PRO_PATH; \
    sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories; \
    apk add --no-cache bash tzdata ttf-dejavu && rm -rf /var/cache/apk/*;

制作含Arthas的基础镜像

此时,文件夹结构是这样:

在这里插入图片描述

进入openjdk8-alpine-arthas的文件夹,执行命令:docker build -t openjdk8-alpine-arthas:1.0 .
在这里插入图片描述

如此,即打好了镜像,我们可使用docker images | grep arthas看看

离线版集成操作步骤

离线版基本同在线版,主要的区别在于1、2步制作基础镜像的时候,需要修改dockerfile里的文件,并把下载的全量包拷贝到容器的指定路径,具体如下:

1、新建文件夹,下载全量Arthas包,下载地址:https://maven.aliyun.com/repository/public/com/taobao/arthas/arthas-packaging/3.1.7/arthas-packaging-3.1.7-bin.zip

2、解压后放入arthas文件
在这里插入图片描述
3、修改dockerfile文件,将全量包文件拷贝至容器内的/root/.arthas/lib/3.1.7/arthas

在这里插入图片描述

离线版Dockerfile内容

FROM adoptopenjdk/openjdk8:alpine-slim
 
LABEL maintainer="renhongqiang1397@gmail.com"
 
ENV BASE_PATH='/opt' \
    PRO_PATH='/opt/project'

# copy arthas
COPY arthas/arthas-boot.jar /opt/arthas
COPY arthas /root/.arthas/lib/3.1.7/arthas


RUN set -eux; \
    mkdir -p $PRO_PATH; \
    sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories; \
    apk add --no-cache bash tzdata ttf-dejavu && rm -rf /var/cache/apk/*;

4、后面操作都一样

使用java web程序测试

1、选择一个Java的web服务,anyone is ok,这里为了方便起见,我已建了一个web工程,见:https://github.com/AAA-AA/web-demo
2、建web-demo文件夹,里面放入Dockerfile,web-demo文件夹,web-demo文件夹里放入用于测试web服务的jar包,大致如下:
在这里插入图片描述
目录结构如下:

在这里插入图片描述

3、进入web-demo文件夹,执行打镜像命令: docker build -t web-demo:1.0 .
在这里插入图片描述

4、运行已打好的镜像 docker run --name web-demo-1.0 -p 9300:9300 web-demo:1.0(后台运行亦可)
在这里插入图片描述

5、另开terminal,找到运行的容器id: 执行docker ps 命令,进入到容器,执行:docker exec -it c628e4261356 /bin/bash,注意容器id得替换掉

在这里插入图片描述

6、执行Arthas启动命令:java -jar ../arthas

在这里插入图片描述

7、选择正在运行的进程号(注:在线版,在选择过后,会先下载全量包),然后进入到Arthas操作页面

在这里插入图片描述

8、至此大功告成,接下来Arthas有的功能均可自行操作

项目地址

测试web项目地址:https://github.com/AAA-AA/web-demo

常见问题

1、离线版是否无网络下可以使用? 答:是

参考

[1] arthas无网络环境下离线安装 https://www.jianshu.com/p/9abb11d5c5a1

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐