基本使用
1:删除本地已有的arthas-demo docker container(非必要)
docker stop arthas-demo || true && docker rm arthas-demo || true
2.进入docker所在宿主机。
docker exec -it mynewclass /bin/bash
3.下载arthas
wget https://alibaba.github.io/arthas/arthas-boot.jar
4.启动arthas
//通过java -jar启动arthas-
java -jar arthas-boot.jar --target-ip 0.0.0.0
5.会弹出发现java进程
选择1,回车
为了避免重复,可以使用直接在dockerfile文件中加入(二选一)
1.dockerfile文件中加入COPY --from=hengyunabc/arthas:latest /opt/arthas
2.通过镜像启动项目
进入容器命令:docker exec -it fb95d0bf4dd5(容器id) /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar"
备注:hengyunabc/arthas是一个docker下载的开源项目,arthas的启动jar
Arthas 热更新线上代码
在基本使用的基础上在进行操作
1.反编译代码 >后面编译后容器的地址(可自己修改)
jad --source-only com.txhn.web.controller.BannerController > /tmp/BannerController.java
2.修改反编译后的代码
vim BannerController.java
备注:要从新打开一个会话,进入你项目的容器内,如图
3.查找加载的 ClassLoader
sc -d *BannerController |grep classLoadHash
成功如图:
4.编译,会产生一个.class文件
mc -c 49c2faae /tmp/BannerController.java -d /tmp
备注:(坑点)直接在controller使用mybatisplus语法传一个对象,在反编译过后会自动增加类型
示例:
解决办法: 自行删除…。
成功如图:
5.热更新代码
redefine /tmp/com/txhn/web/controller/BannerController.class
成功如图: