本站文章总数为:165
Search Posts

shell脚本控制arthas热更新java jar包

内容纲要

arthas阿尔萨斯 Java 应用诊断利器 官网

https://arthas.aliyun.com/

由于项目的热更代码功能出了问题,文件更新了jar不重载
就想着用arthas热更,但是官网只有热更class的说明,没有对整包jar热更的说明

  redefine /tmp/Test.class
   redefine -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class
   redefine --classLoaderClass sun.misc.Launcher$AppClassLoader /tmp/Test.class /tmp/Test\$Inner.class

热更jar

最后测试可以直接redefine jar
示例

redefine /gldata1/server/lv2/main/lz-1.0.jar

shell脚本控制arthas热更新java jar包

因为服务是容器部署,写定时5分钟检车热更任务脚本

#aws sync同步s3存储桶文件到jar位置
/usr/local/bin/aws --profile lv2 s3 sync   s3://xxxxxxxxxs3-bucketxxxx/lv2_dev/main/  /gldata1/server/lv2/main/
#当前jar包md5值
md5_jar=$(md5sum /gldata1/server/lv2/main/lz-1.0.jar|awk '{print $1}')
#旧包md5值
if [ -f /g123/oldmd5.txt  ];then
oldmd5=$(cat /g123/oldmd5.txt)
else
#不存在为1
oldmd5="1"
fi
#md5值不一致热更
if [ ${md5_jar} != ${oldmd5} ] ; then
        mknod arthas_input p
        exec 8<> arthas_input
        java -jar /gldata1/server/arthas-boot.jar <&8 &
        echo -e "1\n" >> arthas_input

#进入arthas 选择1 默认java进程 然后sleep 10秒等待初始化
        sleep 10
        #热更后等待五秒
        echo "redefine /gldata1/server/lv2/main/lz-1.0.jar" >> arthas_input
        sleep 5
        #退出
        echo "quit" >> arthas_input
        #删除arthas_input
        rm -f arthas_input
        sleep 2s
fi
#输出当前jar包md5到txt
echo $(md5sum /gldata1/server/lv2/main/lz-1.0.jar|awk '{print $1}') > /g123/oldmd5.txt

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注