热更不规范,同事两行泪

背景

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提醒您: 诊断千万条,规范第一条,热更不规范,同事两行泪。

      </div>

最新文章

  1. [DeviceOne开发]-手势动画示例分享
  2. ASP.NET 系列:单元测试之StructureMap
  3. Git服务器、http协议及XCode
  4. Docker私有仓库Registry的搭建验证
  5. php扩展redis
  6. MDK —— configuration wizard
  7. html简单定位
  8. PLSQL笔记
  9. BZOJ 4199: [Noi2015]品酒大会( 后缀数组 + 并查集 )
  10. 【CSS】定位元素居中显示
  11. [linux]device eth0 does not seem to be present, delaying initialization
  12. jfinal的回滚
  13. 教你正确打开async/await关键字的使用
  14. AJAX 应用
  15. java数据库导入excel数据
  16. python的Web框架,中间件middleware及djangoAdmin
  17. 键值对的算子讲解 PairRDDFunctions
  18. AOJ 2200 Mr. Rito Post Office (floyd+DP)
  19. spring Boot(十九):使用Spring Boot Actuator监控应用
  20. [异常记录-12]Web Deploy部署:未能连接到远程计算机,请确保在远程计算机上安装了 Web Deploy 并启动了所需的进程(&quot;Web Management Service&quot;)

热门文章

  1. vue学习之路 - 2.基本操作(上)
  2. nodejs fs路径
  3. 爬虫学习(三)——get请求参数解析
  4. position的 relative+absolute实现固定标签在窗口的某个位置
  5. 【转】JSP提交表单
  6. C语言的位运算的优势 !
  7. 2018年江西理工大学C语言程序设计竞赛(高级组) 三角平方数
  8. 【3Sum】cpp
  9. 【SCOI 2010】传送带
  10. Leetcode 611.有效三角形的个数