記錄一次Arthas使用

前言

在疫情期間,首先要爲武漢加油,中國加油!!!java

在家辦公,天天都是007,感受本身已經升級爲熊貓特工了,心累,身體疲憊!!!git

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

下載安裝

下載安裝就很少說了。直接貼官網教程。vim

下載:curl -O alibaba.github.io/arthas/arth…bash

啓動:java -jar arthas-boot.jar服務器

這裏須要重點說明一下:必須使用和目標進程相同的用戶,不然啓動不成功。微信

問題背景

本人前天剛上線一個任務。因爲某產品手誤,誤操做了線上數據,要求幫忙把數據刪除了。curl

這尼瑪的真坑啊,明顯是坑老子。maven

還好有先見之明,沒次作任務的時候多多少少都會寫幾個後門工具(不是爲了刪庫跑路,而是這些後門在特定狀況下真能應急使用,求人不如求己)。可是此次後門工具還有改造一下才行,大半夜的又找不到人來幫你上線,本身又沒有權限。這時候想起了Arthas這個工具能夠熱加載。工具

重點來了

  • jad反編譯代碼

jad --source-only com.xxx.xxx.service.aggregate.AggregateNoRoomService > /tmp/AggregateNoRoomService.java複製代碼
public AggregateNoRoom getAggregateNoRoom(String agentHotelId) {
    List<AggregateNoRoom> aggregateNoRooms = aggregateNoRoomDao.selectList(agentId);
    if (CollectionUtils.isEmpty(aggregateNoRooms)) {
      return null;
    }
    //新增長的邏輯
    for (AggregateNoRoom room : aggregateNoRooms) {
      aggregateNoRoomDao.delete(room.getId())
    }
    return aggregateNoRooms.get(0);
}複製代碼

後續還會更新Arthas的其餘使用,喜歡的小夥伴能夠關注個人公衆號。

Arthas其實仍是很強大的,能夠幫咱們排查線上問題,環境容許的狀況建議可使用,會帶來不少便利,這裏就過多說明了。

總結

可是我在這裏仍是強調一下,最好仍是慎用,畢竟走正規流程還不不用背鍋的。(這麼作很容背鍋,並且產品小哥或者產品小姐姐下次會直接找你幫我修復點數據唄,直接繞過了你領導或上級。

說明我這裏真的沒有黑產品, 來吧互相傷害吧

見證奇蹟的時候到了,數據被清理掉了,沒有求ops給你開權限從新部署程序,沒有給你的tl打電話說要臨時審批一個腳本。太爽了。

執行後門工具

這是時候能夠在使用jad命令,在反編譯一下這個類,看看是否是真正更新成功了。

返回結果:redefine success, size :1

redefine /tmp/AggregateNoRoomService.class

  • redefine熱更新代碼

返回結果:classLoaderHash 1b36fa2

sc -d * AggregateNoRoomService | grep classLoaderHash

  • sc查找加載AggregateNoRoomService的ClassLoader

正常來講是應該使用Arthasmc命令來從新編譯這個修改後文件。可是我在服務器上始終沒有編譯成功,錯誤緣由之後在研究。

這裏就不過說明了,簡單的程序直接javac x x x x.java就能夠了,可是我這個類裏面還依賴了其餘的類型,因此我是用maven直接編譯的整個Java項目,而後可是把這個新的class文件copy出來而後上傳到服務器的。

  • 將這個類從新編譯成class文件

  • vim修改反編譯出來的代碼

這裏有保密協議限制,包路徑已經打碼,小夥伴們直接看過程就能夠了。

  • 寫做不易,轉載請註明出處,喜歡的小夥伴能夠關注公衆號查看更多喜歡的文章。
  • 聯繫方式:4272231@163.com
  • QQ:95472323
  • 微信:ffj2000
相關文章
相關標籤/搜索