博客 / 詳情

返回

記錄使用Arthas修改線上源碼重新加載的一次過程

前情提要

線上跑的代碼找不到源碼了,項目又需要調整某個字段的校驗規則,早有耳聞知道可以通過Arthas完成這個場景的需求,實際動手試了試,在此記錄一下。

警告!警告!

# !!! 重要警告 !!!
# 1. 生產環境謹慎使用,先測試
# 2. 修改前備份原始類
# 3. 確保修改符合JVM規範
# 4. 注意內存泄漏風險
# 5. 重啓後會丟失修改

# 安全操作流程:
# 1. jad導出源碼備份
# 2. 在小範圍測試修改
# 3. mc編譯時檢查錯誤
# 4. redefine後立即驗證
# 5. 記錄修改內容以便後續正式發佈

基本流程

1. 反編譯現有類 -> 2. 修改代碼 -> 3. 編譯成.class -> 4. 重新加載

啓動Arthas

進入到Arthas的bin目錄下執行 `./as.sh` 命令,選擇對應的Java服務。

反編譯現有類到指定文件

jad --source-only *** > /***/arthas-output/***.java

修改代碼

vi /***/arthas-output/***.java

編譯成.class文件

mc -c <ClassLoaderHash> /***/arthas-output/***.java -d /***

查看ClassLoaderHash的值

sc -d com.***

輸出的內容會顯示具體的ClassLoaderHash值

重新加載class文件

retransform /***/***.class
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.