使用Arthas實現熱更新代碼

在定位問題或快速驗證問題的時候,如果還需要編碼、推送到倉庫、在編譯發佈,整個流程會比較長,我們可以使用Arthas完成熱修改代碼,實時看到最新效果

啓動arthas

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

反編譯&修改類

  • 找到對應的類全名: sc命令
# arthas命令: 找到對應的全量類名
sc *.UserController
# sc: Search-Class
# 輸出com.example.demo.arthas.user.UserController
  • 反編譯類:jad
jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
# jad 命令將 JVM 中實際運行的 class 的 byte code 反編譯成 java 代碼
  • 修改類文件
vim /tmp/UserController.java

熱編譯&熱加載

  • 查找類加載器
sc -d *UserController | grep classLoaderHash
#輸出:classLoaderHash   1be6f5c3
  • 熱編譯
$ mc -c 1be6f5c3 /tmp/UserController.java -d /tmp
#mc: Memory Compiler/內存編譯器
  • 加載新類

使用redefine命令重新加載新編譯好的UserController.class:

redefine /tmp/com/example/demo/arthas/user/UserController.class

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章