天天看點

Java診斷工具 Arthas是什麼安裝以及開始使用常見指令以及使用問題場景解決

是什麼

        Arthas

是Alibaba開源的Java診斷工具,深受開發者喜愛。線上排查問題,無需重新開機;動态跟蹤Java代碼;實時監控JVM狀态。可以解決如下常見問題:

  1. 這個類從哪個 jar 包加載的?為什麼會報各種類相關的 Exception?
  2. 我改的代碼為什麼沒有執行到?難道是我沒 commit?分支搞錯了?
  3. 遇到問題無法線上上 debug,難道隻能通過加日志再重新釋出嗎?
  4. 線上遇到某個使用者的資料處理有問題,但線上同樣無法 debug,線下無法重制!
  5. 是否有一個全局視角來檢視系統的運作狀況?
  6. 有什麼辦法可以監控到JVM的實時運作狀态?
  7. 怎麼快速定位應用的熱點,生成火焰圖?
  8. 怎樣直接從JVM内查找某個類的執行個體?

安裝以及開始使用

https://arthas.aliyun.com/doc/quick-start.html

常見指令以及使用

https://arthas.aliyun.com/doc/commands.html

問題場景解決

  1. 方法内部調用路徑,并輸出方法路徑上的每個節點上耗時 trace xx類.xx方法  run

    $ trace demo.MathGame run
    Press Ctrl+C to abort.
    Affect(class-cnt:1 , method-cnt:1) cost in 42 ms.
    `---ts=2018-12-04 00:44:17;thread_name=main;id=1;is_daemon=false;priority=5;[email protected]
        `---[10.611029ms] demo.MathGame:run()
            +---[0.05638ms] java.util.Random:nextInt()
            +---[10.036885ms] demo.MathGame:primeFactors()
            `---[0.170316ms] demo.MathGame:print()
    過濾掉jdk的函數    trace -j  demo.MathGame run
    調用耗時過濾     trace demo.MathGame run '#cost > 10'
               
  2. watch 檢視方法入參,出參資訊。stack 檢視方法的調用路徑。tt 指令可以記錄列印出某方法的執行詳情,并觀察不同時間,不同入參的執行情況。【大多是線下無法重制問題,而線上又不能有debug環境時】
  3. 使用 dashboard 指令可以概覽程式的 線程、記憶體、GC、運作環境資訊。
  4. 使用 thread檢視所有線程資訊,同時會列出每個線程的

    CPU

    使用率,可以看到圖裡 ID 為12 的線程 CPU 使用100%。
  5. 如果隻是為了尋找 CPU 使用較高的線程,可以直接使用指令 thread -n [顯示的線程個數] ,就可以排列出 CPU 使用率 Top N 的線程。