導讀:雖然已經有很多分析工具 jvisualvm,jstat,jmap,jstack,Memory Analyzer等。但可能不是大雜燴,或者線上無法分析等。是以看看arthas的功能,好用就用它了
Arthas 是Alibaba開源的Java診斷工具,深受開發者喜愛。當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:
這個類從哪個 jar 包加載的?為什麼會報各種類相關的 Exception?
我改的代碼為什麼沒有執行到?難道是我沒 commit?分支搞錯了?
遇到問題無法線上上 debug,難道隻能通過加日志再重新釋出嗎?
線上遇到某個使用者的資料處理有問題,但線上同樣無法 debug,線下無法重制!
是否有一個全局視角來檢視系統的運作狀況?
有什麼辦法可以監控到JVM的實時運作狀态?
怎麼快速定位應用的熱點,生成火焰圖?
Arthas支援JDK 6+,支援Linux/Mac/Windows,采用指令行互動模式,同時提供豐富的 Tab 自動補全功能,進一步友善進行問題的定位和診斷。
Arthas 的指令、功能在其官方文檔有詳細介紹,對于Arthas的使用我最近會出一個整套系列文章,來講述我們日常是怎麼用Arthas定位和排查問題!

擴充:java Instrumentation指的是可以用獨立于應用程式之外的代理(agent)程式來監測和協助運作在JVM上的應用程式。這種監測和協助包括但不限于擷取JVM運作時狀态,替換和修改類定義等。Arthas 的整體邏輯也是在 Java 的Instrumentation基礎上來實作。
官方提供了兩種使用方式 下載下傳arthas-boot.jar 或者直接安裝使用 as. sh。這裡說明前一種。
注明:個人環境是Mac環境,其他環境可借鑒參考
會将目标檔案下載下傳到目前目錄中。
可以看到執行 java -jar arthas-boot.jar之後,它羅列了目前的java程序供你選擇,選擇之後,就可以對該程序進行監控了。(也可以直接增加pid監控,如:java -jar arthas-boot.jar pid)。在選擇好pid之後,它首先會将 arthas所需要的jar相關檔案進行下載下傳,然後做一些初始化的工作。
注:最後一行‘[arthas@1640]$’ ,說明打開進入了監控用戶端,在這裡就可以執行相關指令進行檢視了。可以使用quit(退出目前用戶端)、stop\shutdown(關閉arthas服務端,并退出所有用戶端)。除了在指令行檢視外,還可以通過浏覽器通路http://127.0.0.1:8563/檢視。如下圖:
當我們在shell端執行quit,并重新java -jar arthas-boot.jar 1640目前程序後。會有這樣一個提示(表示目标程序已被監聽,跳過attach)本篇暫時不講attach機制相關内容,感興趣的朋友可自行先查閱資料,後續篇章會慢慢講解。
這裡是下載下傳好之後的檔案清單,也就是直接執行第二種安裝方式‘curl -L https://alibaba.github.io/arthas/install.sh | sh’安裝的檔案。
通過輸入help可以看到,提供了很多的功能,tab可自動補全功能,
以下清單中标有注1的需要知道,這些指令通過asm位元組碼增強技術來實作,會在指定的方法中插入一些切面來實作資料統計及觀測功能。是以線上上、預發環境使用時,要明确需要觀測的類、方法及條件。診斷結束後要shutdown或者執行reset指令。
這裡就挑幾個常用的指令進行展示:
dashboard:檢視jvm\線程\env基本資訊(上面浏覽器檢視效果)
thread:檢視線程的運作狀态
jad:反編譯class檔案[通過自動補全,查找上線代碼是否包含自己新增的功能,很友善]
【以下的這幾個通過簡單測試代碼進行試用】
– sc:檢視jvm中已經加載的類資訊
– stack:調用棧資訊
– Track:觀察方法執行的時候哪個子調用比較慢:
– watch:觀察方法的執行入參
主要展示了三部分内容,線程,jvm,java-env。每過幾秒會自動重新整理
可以用來顯示線程的一些基本資訊,使用文法如下
例如使用 -n ,顯示幾條線程資訊,根據cpu使用率排序
可以用來檢查線上的釋出代碼是否是最新的。可以定位到具體類,或者具體方法。很友善.
編譯類,并外部加載。
可以檢視
https://alibaba.github.io/arthas/mc
https://alibaba.github.io/arthas/redefine
檢視jvm中加載的類的資訊
例如檢視java.util.Stack類資訊
對于Arthas的使用我最近會出一個整套系列文章,來講述我們日常是怎麼用Arthas定位和排查問題!正在寫案例中...敬請期待!
作者 | 智哥
原文連結
本文為碼農架構原創内容,未經允許不得轉載。