Arthas 是基於 Greys 進行二次開發的全新在線診斷工具,利用Java6的Instrumentation特性,動態加強你所指定的類,獲取你想要到的信息, 採用命令行交互模式,同時提供豐富的 Tab 自動補全功能,讓你在定位、分析診斷問題時看每個操做都看起來是那麼的 666java
PS:阿里已開源 https://github.com/alibaba/ar...git
下載壓縮包,上傳到須要被診斷的機器, 解壓縮github
dashboard正則表達式
當前系統的實時數據面板express
thread 數據結構
查看當前 JVM 的線程堆棧信息jvm
jvm 工具
查看當前 JVM 的信息性能
sc ui
查看JVM已加載的類信息
sm
查看已加載類的方法信息
jad
反編譯指定已加載類的源碼
classloader
查看classloader的繼承樹,urls,類加載信息,使用classloader去getResource
monitor
方法執行監控
watch
方法執行數據觀測
trace
方法內部調用路徑,並輸出方法路徑上的每一個節點上耗時
stack
輸出當前方法被調用的調用路徑
tt
方法執行數據的時空隧道,記錄下指定方法每次調用的入參和返回信息,並能對這些不一樣的時間下調用進行觀測
reset
重置加強類,將被 Arthas 加強過的類所有還原,Arthas 服務端關閉時會重置全部加強過的類
quit
退出當前 Arthas 客戶端,其餘 Arthas 客戶端不受影響
shutdown
關閉 Arthas 服務端,全部 Arthas 客戶端所有退出
參數解釋
ID: Java級別的線程ID,注意這個ID不能跟jstack中的nativeID一一對應
NAME: 線程名
GROUP: 線程組名
PRIORITY: 線程優先級, 1~10之間的數字,越大表示優先級越高
STATE: 線程的狀態
CPU%: 線程消耗的cpu佔比,採樣100ms,將全部線程在這100ms內的cpu使用量求和,再算出每一個線程的cpu使用佔比。
TIME: 線程運行總時間
INTERRUPTE: 線程當前的中斷位狀態
DAEMON: 是不是daemon線程
參數說明
id
線程id
-n
指定最忙的前N個線程並打印堆棧
b
找出當前阻塞其餘線程的線程
-i
指定cpu佔比統計的採樣間隔,單位爲毫秒
PS: 這裏的cpu統計的是,一段採樣間隔內,當前JVM裏各個線程所佔用的cpu時間佔總cpu時間的百分比。其計算方法爲: 首先進行一次採樣,得到全部線程的cpu的使用時間(調用的是java.lang.management.ThreadMXBean#getThreadCpuTime這個接口),而後睡眠一段時間,默認100ms,能夠經過-i參數指定,而後再採樣一次,最後得出這段時間內各個線程消耗的cpu時間狀況,最後算出百分比。注意: 這個統計也會產生必定的開銷(JDK這個接口自己開銷比較大),所以會看到as的線程佔用必定的百分比,爲了下降統計自身的開銷帶來的影響,能夠把採樣間隔拉長一些,好比5000毫秒。
參數說明
class-pattern
類名錶達式匹配
-d
輸出當前類的詳細信息,包括這個類所加載的原始文件來源、類的聲明、加載的ClassLoader等詳細信息。若是一個類被多個ClassLoader所加載,則會出現屢次
-E
開啓正則表達式匹配,默認爲通配符匹配
-f
輸出當前類的成員變量信息(須要配合參數-d一塊兒使用)
-x
指定輸出靜態變量時屬性的遍歷深度,默認爲 0,即直接使用 toString 輸出
PS: class-pattern支持全限定名,如com.test.AAA,也支持com/test/AAA這樣的格式,這樣,咱們從異常堆棧裏面把類名拷貝過來的時候,不須要在手動把/替換爲.啦,
sc 默認開啓了子類匹配功能,也就是說全部當前類的子類也會被搜索出來,想要精確的匹配,請打開options disable-sub-class true開關
參數說明
class-pattern
類名錶達式匹配
method-pattern
方法名錶達式匹配
-d
展現每一個方法的詳細信息
-E
開啓正則表達式匹配,默認爲通配符匹配
PS:查看已加載類的方法信息, 「Search-Method」 的簡寫,這個命令能搜索出全部已經加載了 Class 信息的方法信息。
sm 命令只能看到由當前類所聲明 (declaring) 的方法,父類則沒法看到
monitor 命令是一個非實時返回命令,實時返回命令是輸入以後當即返回,而非實時返回的命令,則是不斷的等待目標 Java 進程返回信息,直到用戶輸入 Ctrl+C 爲止。服務端是以任務的形式在後臺跑任務,植入的代碼隨着任務的停止而被不會被執行,因此任務關閉後,不會對原有性能產生太大影響,並且原則上,任何 Arthas 的命令也不會引發任何原有業務邏輯的改變
參數說明
class-pattern
類名錶達式匹配
method-pattern
方法名錶達式匹配
-c
統計週期,默認值爲120秒
監控項
timestamp 時間戳
class java類
method 方法(構造方法、普通方法)
total 調用次數
success 成功次數
fail 失敗次數
rt 平均rt
fail-rate 失敗率
PS:方法執行監控, 對匹配 class-pattern/method-pattern的類、方法的調用進行監控。
方法內部調用路徑,並輸出方法路徑上的每一個節點上耗時, trace 命令能主動搜索 class-pattern/method-pattern 對應的方法調用路徑,渲染和統計整個調用鏈路上的全部性能開銷和追蹤調用鏈路。
trace 能方便的幫助你定位和發現因 RT 高而致使的性能問題缺陷,但其每次只能跟蹤一級方法的調用鏈路
trace 在執行的過程當中自己是會有必定的性能開銷,在統計的報告中並未像 JProfiler 同樣預先減去其自身的統計開銷。因此這統計出來有些許的不許,渲染路徑上調用的類、方法越多,性能誤差越大。但仍是能讓你看清一些事情的。
參數說明
class-pattern
類名錶達式匹配
method-pattern
方法名錶達式匹配
condition-express
條件表達式
-n
命令執行次數
#cost
方法執行耗時
PS: 不少時候咱們只想看到某個方法的rt大於某個時間以後的trace結果,例如trace *StringUtils isBlank '$cost>100'表示當執行時間超過100ms的時候,纔會輸出trace的結果。
輸出當前方法被調用的調用路徑, 不少時候咱們都知道一個方法被執行,但這個方法被執行的路徑很是多,或者你根本就不知道這個方法是從那裏被執行了,此時你須要的是 stack 命令。
參數說明
class-pattern
類名錶達式匹配
method-pattern
方法名錶達式匹配
condition-express
條件表達式
-n
執行次數限制
方法執行數據觀測, 讓你能方便的觀察到指定方法的調用狀況。能觀察到的範圍爲:返回值、拋出異常、入參,經過編寫 groovy 表達式進行對應變量的查看。
參數說明
class-pattern
類名錶達式匹配
method-pattern
方法名錶達式匹配
express
觀察表達式
condition-express
條件表達式
-b
在方法調用以前觀察(默認關閉)
-e
在方法異常以後觀察(默認關閉)
-s
在方法返回以後觀察(默認關閉)
-f
在方法結束以後(正常返回和異常返回)觀察 (默認開啓)
-x
指定輸出結果的屬性遍歷深度,默認爲0
PS:這裏重點要說明的是觀察表達式,觀察表達式的構成主要由 groovy 表達式組成,只要是一個合法的 groovy 表達式,都能被正常支持。
觀察的維度也比較多,主要體如今參數 advice 的數據結構上。Advice 參數最主要是封裝了通知節點的全部信息。