码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • arthas热更新线上代码实操记录


    代码部署

    先将代码打包成jar包,再通过dockerFile打包,或者干脆更简单些,直接运行一个openjdk镜像,然后将jar包cp命令拷进去,方式有很多种。
    我这边用于演示的镜像是自己基于jdk镜像版本8-jdk-alpine和arthas 3.6.5版本打的,唯一的区别就是我在镜像内的/opt/目录下放了arthas的jar包,就不用大家自己下载了,省去了一些麻烦。

    准备验证的代码

    在这里插入图片描述

    然后先将镜像拉下来

    docker pull raypick/openjdk-arthas:8-jdk-alpine-a3.6.5
    
    • 1

    在这里插入图片描述
    然后我这边就不写dockerfile了,直接cp进去。先启动容器,这里的8084是因为我的spring boot项目指定的端口是8084,所以你自己更换一下就行了。

    docker exec -itd -p 8084:8084 7ab762d69920
    
    • 1

    我这边启动后CONTAINER ID为 2a550ef82028

    //将程序拷进docker容器
    docker cp springboot-arthas-example-0.0.1.jar 2a550ef82028:/opt/
    
    //进入容器
    docker exec -it 2a550ef82028 sh
    
    cd /opt
    
    //后台运行程序
    java -jar springboot-arthas-example-0.0.1.jar  > /tmp/spring-boot-arthas-examples.log &
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    通过浏览器调用,发现第一个TOTAL值为8
    在这里插入图片描述

    在这里插入图片描述
    然后获取到最新的UserInfoController.class字节码文件,并拷贝进docker容器内,我这里放到/tmp/目录下

    docker cp /tmp/UserInfoController.class 2a550ef82028:/tmp/
    
    • 1

    然后进入容器启动arthas

    cd /opt/
    java -jar arthas-boot.jar
    
    根据提示选择你要操作的进程
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    执行命令

    sc -d 类名 grep classLoaderHash
    
    • 1

    在这里插入图片描述
    得到classLoaderHash为20ad9418

    执行命令

    redefine -c 20ad9418 待替换的class路径
    
    • 1

    表示替换成功
    在这里插入图片描述

    再来浏览器刷新,发现数值已经+1,从8变成了9
    在这里插入图片描述
    到这里就表示成功了,你可以手动尝试一下这个过程。

  • 相关阅读:
    Linux学习-31-Linux权限位及修改文件和目录的权限
    华云数据×天融信 | 提升云安全能力 联合打造“数据中心云安全资源池解决方案”
    (1)设计模式之责任链模式
    Java EE-servlet API 三种主要的类
    一夜登顶GitHub!字节内网数据结构与算法刷题笔记,看完直呼卧槽
    JavaScript开发工具WebStorm入门教程:如何安装WebStorm
    .NET微信网页开发之网页授权获取用户基本信息
    爬虫怎么伪装才更安全
    第二增长曲线 | 企业创新突破停滞困境的驱动指南
    表面原子转移自由基聚合ATRP基团功能性聚苯乙烯微球/含氟双官能团聚苯乙烯微球的应用
  • 原文地址:https://blog.csdn.net/weixin_44388689/article/details/126594643
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号