美文网首页
JAVA神操作--使用Arthas线上热更新实战

JAVA神操作--使用Arthas线上热更新实战

作者: 我不想成为胖子 | 来源:发表于2019-03-07 20:53 被阅读0次

    热更不规范,同事两行泪

    背景

    C君是一个javaer,最近在开发用户登出接口的时候,不小心把接口参数拼错了
    正确的是:

    /api/v1/user/logout?referrer=www.javaer.com
    

    结果不小心把referrer写成了referre,把字母 r 给丢了,带来的影响就是用户登出后再登陆就无法回到正确的地址,而且代码已经上生产了,这可怎么办?!
    偷偷发一版?那么多用户已经在线了,如果被发现就GG了。
    下一版再修复?那等待时间也太长了,让BOSS知道也是一首凉凉啊,有可能还的找新的BOSS谈。
    突然,C君发现Alibaba开源的一款神器Arthas,居然可以热更新!!!真乃神器啊~

    Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。
    当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

    • 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
    • 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
    • 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
    • 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
    • 是否有一个全局视角来查看系统的运行状况?
    • 有什么办法可以监控到JVM的实时运行状态?

    开搞

    1. 安装Arthas
    Arthas的文档非常全面,安装起来当然没有什么难度啦。简单总结就是下载 --> 启动 --> 使用。针对服务器无法使用外网的情况,Arthas也提供了全量安装包,非常的方便。

    2. 修复BUG
    启动Arthas

    java -jar arthas-boot.jar  
    

    然后选择我们需要热更新的JVM进程

    [INFO] arthas-boot version: 3.1.0
    [INFO] Process 58827 already using port 3658
    [INFO] Process 58827 already using port 8563
    [INFO] Found existing java process, please choose one and hit RETURN.
    * [1]: 58827 org.apache.catalina.startup.Bootstrap
      [2]: 59288 org.apache.catalina.startup.Bootstrap
      [3]: 59482 org.apache.catalina.startup.Bootstrap
      [4]: 1857 tms-gateway-proxy-0.0.1-SNAPSHOT.jar
      [5]: 59834 org.tanukisoftware.wrapper.WrapperSimpleApp
    1
    

    在这台服务器上一共有5个java进程,可以通过ps命令确认我们使用的是哪个。这里我们选择了第一个。
    一段启动信息后,就进入了交互模式。
    通过sc查找需要修改的class的ClassLoader

    $ sc -d *OAuthClient| grep classLoaderHash
    classLoaderHash   452c5c14
    classLoaderHash   452c5c14 
    

    再使用redefine命令重新加载新编译好的OAuthClient.class

    $ redefine -c 452c5c14  /tmp/OAuthClient.class
    redefine success, size: 1
    

    注意:

    不允许新增加field/method
    正在跑的函数,没有退出不能生效

    检验热更新结果
    再次访问登出接口然后再登陆,就会跳转到正确的地址去了。

    最后,Arthas提醒您: 诊断千万条,规范第一条,热更不规范,同事两行泪。

    相关文章

      网友评论

          本文标题:JAVA神操作--使用Arthas线上热更新实战

          本文链接:https://www.haomeiwen.com/subject/rgshpqtx.html