内容目录
arthas阿尔萨斯 Java 应用诊断利器 官网
由于项目的热更代码功能出了问题,文件更新了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
近期评论