背景
公司的IAM(Identity and Access Management)系统在生产环境登录过程比较慢,需要定位优化比较耗时的代码,所以引入了Arthas这个第三方工具追踪监控函数执行过程。IAM是通过docker+jenkins自动化部署的,所以需要在构建镜像时将IAM和Arthas打包到同一个镜像下。
实现
在Arthas官网下载arthas-packaging-4.0.5-bin压缩包,解压后放到iam的根目录中如图所示

添加COPY arthas-packaging-4.0.5-bin/* ./arthas-packaging-4.0.5-bin/命令如下:
FROM 172.20.15.4/library/openjdk:11-jdk-stretch-arthas2
MAINTAINER trendytech
WORKDIR /usr/local/lib/trendy-iam
COPY target/trendy-iam-*-exec.jar ./trendy-iam.jar
COPY config/* ./config/
COPY bin/* ./bin/
COPY arthas-packaging-4.0.5-bin/* ./arthas-packaging-4.0.5-bin/
RUN chmod 755 ./bin/trendy-iam
RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
CMD ["./bin/trendy-iam", "run"]打包镜像成功后进入rancher执行命令行

执行 java -jar arthas-boot.jar命令启动arthas如图:

输入iam对应的进程并回车

效果

注意事项
1.Arthas的运行依赖于jps,所以java镜像一定要是jdk(Java Development Kit),而不能是jre(Java Runtime Environment)
JDK 的定位: JDK 是用于开发 Java 应用程序的工具包,它包含了编译、调试、运行 Java 程序所需的各种工具,例如编译器 (
javac)、调试器 (jdb)、以及jps等。JRE 的定位: JRE 是用于运行 Java 应用程序的运行时环境,它只包含了运行 Java 程序所需的最小组件,例如 JVM 和核心类库。
jps的作用:jps命令主要用于开发者和系统管理员,用于诊断和监控 Java 应用程序。它能够列出正在运行的 Java 进程,方便开发者了解应用程序的运行状态,或者在出现问题时进行排查。
2. Arthas运行的端口1002可能被其他端口占用,可以考虑换个启动端口,或者把占用端口的程序禁用掉