天天看點

記錄一次 Arthas 使用

疫情期間,在家辦公,每天都是 007,感覺自己已經更新為熊貓特工了,心累,身體疲憊!!!今天終于有時間休息一下,然後記錄一下在家辦公期間 Arthas 的簡單使用。

記錄一次 Arthas 使用

【Arthas 官方社群正在舉行征文活動,參加即有獎品拿~點選投稿】

疫情期間,在家辦公,每天都是 007,感覺自己已經更新為熊貓特工了,心累,身體疲憊!!!

今天終于有時間休息一下,然後記錄一下在家辦公期間 Arthas 的簡單使用。

方式一:推薦使用 IDEA 插件下載下傳 Cloud Toolkit 來使用 Arthas

Cloud Toolkit 是阿裡雲釋出的免費本地 IDE 插件,幫助開發者更高效地開發、測試、診斷并部署應用。通過插件,可以将本地應用一鍵部署到任意伺服器,甚至雲端(ECS、EDAS、ACK、ACR 和 小程式雲等);并且還内置了 Arthas 診斷、Dubbo工具、Terminal 終端、檔案上傳、函數計算 和 MySQL 執行器等工具。不僅僅有 IntelliJ IDEA 主流版本,還有 Eclipse、Pycharm、Maven 等其他版本。

方式二:直接下載下傳

啟動:java -jar arthas-boot.jar
這裡需要重點說明一下:必須使用和目标程序相同的使用者,否則啟動不成功。
本人前天剛上線一個任務。由于某産品手誤,誤操作了線上資料,要求幫忙把資料删除了。
這尼瑪的真坑啊,明顯是坑老子。
還好有先見之明,沒次做任務的時候多多少少都會寫幾個後門工具(不是為了删庫跑路,而是這些後門在特定情況下真能應急使用,求人不如求己)。但是這次後門工具還有改造一下才行,大半夜的又找不到人來幫你上線,自己又沒有權限。這時候想起了 Arthas 這個工具可以熱加載。

jad 反編譯代碼

這裡有保密協定限制,包路徑已經打碼,小夥伴們直接看過程就可以了。

vim 修改反編譯出來的代碼

将這個類重新編譯成 class 檔案

這裡就不過說明了,簡單的程式直接javac x x x x.java就可以了,但是我這個類裡面還依賴了其他的類型,是以我是用maven直接編譯的整個Java項目,然後但是把這個新的class檔案copy出來然後上傳到伺服器的。
正常來說是應該使用Arthas的mc指令來重新編譯這個修改後檔案。但是我在伺服器上始終沒有編譯成功,錯誤原因以後在研究。

sc 查找加載 **AggregateNoRoomService **的 ClassLoader

sc -d * AggregateNoRoomService | grep classLoaderHash
傳回結果:classLoaderHash 1b36fa2

redefine 熱更新代碼

redefine -c 1b36fa2 /tmp/AggregateNoRoomService.class
傳回結果:redefine success, size :1
這是時候可以在使用 jad 指令,在反編譯一下這個類,看看是不是真正更新成功了。
見證奇迹的時候到了,資料被清理掉了,沒有求 ops 給你開權限重新部署程式,沒有給你的 tl 打電話說要臨時審批一個腳本,太爽了。
但是我在這裡還是強調一下,最好還是慎用,畢竟走正規流程還不不用背鍋的。(這麼做很容背鍋,而且産品小哥或者産品小姐姐下次會直接找你幫我修複點資料呗,直接繞過了你上司或上級。說明我這裡真的沒有黑産品, 來吧互相傷害吧)

Arthas 其實還是很強大的,可以幫我們排查線上問題,環境允許的情況建議可以使用,會帶來很多便利,這裡就過多說明了。

Arthas 官方正在舉行征文活動,如果你有:

使用 Arthas 排查過的問題

對 Arthas 進行源碼解讀

對 Arthas 提出建議

不限,其它與 Arthas 有關的内容

歡迎參加征文活動,還有獎品拿哦~點選投稿

“阿裡巴巴雲原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的公衆号。”