下載arthas
windows:https://alibaba.github.io/arthas/arthas-boot.jar mac/linux:https://arthas.aliyun.com/arthas-boot.jar
源碼及文檔
https://github.com/alibaba/arthas https://arthas.aliyun.com/doc/en/
啟動arthas
java -jar /opt/arthas/arthas-boot.jar
輸入模塊編碼
[1] : 1 demo.jar [2] : 200 demo2.jar 輸入:1
Watch命令
//作用 watch命令是監控某個類的某個方法的執行情況,包括入參,當前對象的屬性,返參,異常情況。 //命令: watch 包名.類名 方法名 "{params,target,returnObj,throwExp}" "#cost>10&¶ms[1]==101" -b -f -x 2 //參數:
1. 該命令表示顯示方法的入參、異常堆棧,當前對象屬性,返回值,分別對應params,target,returnObj,throwExp
2. throwExp要放最后,否則打不出異常,如果watch命令后面加上-e表示只有出現異常才會捕獲
3. #cost>10表示耗時大於10ms,params[1]==101表示第1個參數值等於101,用&&表示交集
4. 默認沒有加-b的情況下,params表示的是函數返回時,入參的值,而不是函數調用前的入參值,所以可以加上-b -f,這時一個結果是函數調用前入參值(不會有異常和返回值),
第二個結果是函數返回后的結果,注意-b -f或者-b -e要放在-x前面
5. -x 2表示上述4個信息顯示2個層級,如json可以顯示2層。
monitor命令
//作用 monitor命令可以監控一定時間范圍內某個類的某個方法的整體執行情況,如成功多少次,失敗多少次,平均rt值 //命令 monitor -c 5 包名.類名 方法名 "#cost>1" //參數 1. -c 5表示統計周期為5秒,默認是120秒, 2. -b這個命令不要加,是在統計前計算,好像有問題。 3. #cost>1表示只統計耗時大於1ms的請求,這個條件表達式幾個命令都可以用的
trace命令
//作用 trace命令可以監控方法的每一個步驟的執行時長,以及方法內的業務執行的順序 //命令 終端1執行:trace -n 5 包名.類名 方法名1 '#cost > 1' --skipJDKMethod false 終端2執行:trace -n 5 包名.類名 方法名2 --listenerId 1 //訪問一次接口即可查看耗時 //參數 1. 監控執行時長超過1ms的方法每個具體步驟的執行時長 2. n=5表示執行5次后退出。 3. 默認jdk的方法 即java.*下的方法都不會打印,如果要完整打印,使用--skipJDKMethod false 4. 方法名2表示方法1中調用的方法 5. --listenerId 1 監聽方法中指定方法在終端1中會顯示監聽id實現級聯
操作步驟:
1. 打開終端1運行arthas,監控第一層方法 會返回一個listenerId:1 2. 調用接口可以查看監控的方法具體的內部方法耗時 3. 打開終端2運行arthas,查看終端1運行的端口對應的進程輸入數字 一般為1,進入上次運行的arthas進程 4. 在終端2輸入監控的第二次命令 監控第二層方法 尾部跟上 --listernerId 1 5. 調用接口可以在終端1繼續查看第一層及第二層方法內部方法的具體耗時 以此類推
thread命令
//作用 thread命令可以查看當前CPU較高的線程 //命令 thread -n 3 -i 1000 //參數 1. 查看最近1000ms內CPU最高的3個線程
退出arthas
quit 退出本次連接,但宿主jvm內仍運行着arthas-server,只是退出了arthas-client
stop 退出arthas-server,並恢復增強過的類