我所理解的Arthas

會爬樹的猴子發表於2019-02-14

安裝過程省略,網路上有很多。這裡不再copy,以下環境為win10 --jdk 1.8 --Arthas 3.0.5

遇到的問題

我所理解的Arthas

[ERROR] Target process 17272 is not the process using port 3658, you will connect to an unexpected process. [ERROR] If you still want to attach target process 17272, Try to set a different telnet port by using --telnet-port argument. [ERROR] Or try to shutdown the process 13400 using the telnet port first.

    提示這個的原因是錯誤使用了 exit退出,之前開啟過程式[3] 埠仍被佔用。如果客戶端無操5分鐘,session過期後,再次登入選擇其它程式也會提示上述錯誤。類似quit。正確退出命令為:shutdown。

使用:http://localhost:8563/ 可以通過web訪問Arthas (客戶端)

與退出有關命令有:

  • quit——退出當前 Arthas 客戶端,其他 Arthas 客戶端不受影響
  • shutdown——關閉 Arthas 服務端,所有 Arthas 客戶端全部退出

    如上圖可見我本地啟動了兩個程式[3]、 [4] 兩個springboot 專案。接下來帶大家串一下通過Atrhas的命令,我們能得到什麼樣的有用資訊以及能給我們提供哪些判斷依據。

    這裡先丟擲一個問題,就是你為什麼要使用arthas,或許是遇到了線上難以定位的問題,又或者其它。帶著問題是看,總是能收穫一個成串的知識鏈。

我所理解的Arthas

問題一:這個類從哪個 jar 包載入的?

$ sc

    “Search-Class” 的簡寫,這個命令能搜尋出所有已經載入到 JVM 中的 Class 資訊. 對於不熟悉的命令在後面新增-h往往能得到更多有用的資訊。 貼圖僅此一次,後續類似命令不再贅述。

我所理解的Arthas

  • 模糊匹配

    比如命令:sc com.sun.proxy.* 可以將全類名前匹配的類搜尋出來。

  • 類詳細資訊

    -d 表示: detail

我所理解的Arthas
    通過code-source能夠得到這個類具體是由哪個jar包載入的。這個在處理鑽石依賴情況,通常可以用到。

問題二:我改的程式碼為什麼沒有執行到?難道是我沒 commit?分支搞錯了?

$ jad

    使用過eclipse 安裝反編譯外掛包的童鞋們可能更瞭解,一下就能記住這個命令。 官方例項:

我所理解的Arthas
反編譯出來的原始碼高亮展示,更方便定位程式碼是不是正確的分支,自己程式碼有沒有提交。

問題二:遇到問題無法線上上 debug,難道只能通過加日誌再重新發布嗎?

問題三:某個使用者的資料處理有問題,但線上同樣無法 debug,線下無法重現!

問題四:是否有一個全域性視角來檢視系統的執行狀況?

$ dashboard

統的實時資料皮膚,請移步閱讀官方文件。

  • 主要活躍執行緒列表
  • jvm記憶體各區域使用情況以及GC資訊
  • 執行環境

問題五:有什麼辦法可以監控到JVM的實時執行狀態?

相關文章