本文檔隻提供基礎解釋 可以轉跳到arthas官網檢視詳細介紹
進階使用
基礎指令
- help——檢視指令幫助資訊
- cat ——列印檔案内容,和linux裡的cat指令類似
- echo –列印參數,和linux裡的echo指令類似
- grep ——比對查找,和linux裡的grep指令類似
- base64 ——base64編碼轉換,和linux裡的base64指令類似
- tee ——複制标準輸入到标準輸出和指定的檔案,和linux裡的tee指令類似
- pwd ——傳回目前的工作目錄,和linux指令類似
- cls——清空目前螢幕區域
- session——檢視目前會話的資訊
- reset ——重置增強類,将被 Arthas 增強過的類全部還原,Arthas 服務端關閉時會重置所有增強過的類
- version——輸出目前目标 Java 程序所加載的 Arthas 版本号
- history——列印指令曆史
- quit——退出目前 Arthas 用戶端,其他 Arthas 用戶端不受影響
- stop——關閉 Arthas 服務端,所有 Arthas 用戶端全部退出
- keymap ——Arthas快捷鍵清單及自定義快捷鍵
jvm相關
- dashboard ——目前系統的實時資料面闆
- thread ——檢視目前 JVM 的線程堆棧資訊
- jvm ——檢視目前 JVM 的資訊
- sysprop ——檢視和修改JVM的系統屬性
- sysenv ——檢視JVM的環境變量
- vmoption ——檢視和修改JVM裡診斷相關的option
- perfcounter ——檢視目前 JVM 的Perf Counter資訊
- logger ——檢視和修改logger
- getstatic ——檢視類的靜态屬性
- ognl ——執行ognl表達式
- mbean ——檢視 Mbean 的資訊
- heapdump ——dump java heap, 類似jmap指令的heap dump功能
class/classloader相關
- sc ——檢視JVM已加載的類資訊
- sm ——檢視已加載類的方法資訊
- jad ——反編譯指定已加載類的源碼
- mc ——記憶體編譯器,記憶體編譯
檔案為.java
檔案.class
- retransform ——加載外部的
檔案,retransform到JVM裡.class
- redefine
檔案,redefine到JVM裡.class
- dump ——dump 已加載類的 byte code 到特定目錄
- classloader ——檢視classloader的繼承樹,urls,類加載資訊,使用classloader去getResource
monitor/watch/trace相關
請注意,這些指令,都通過位元組碼增強技術來實作的,會在指定類的方法中插入一些切面來實作資料統計和觀測,是以線上上、預發使用時,請盡量明确需要觀測的類、方法以及條件,診斷結束要執行或将增強過的類執行
stop
指令。
reset
- monitor ——方法執行監控
- watch ——方法執行資料觀測
- trace ——方法内部調用路徑,并輸出方法路徑上的每個節點上耗時
- stack ——輸出目前方法被調用的調用路徑
- tt ——方法執行資料的時空隧道,記錄下指定方法每次調用的入參和傳回資訊,并能對這些不同的時間下調用進行觀測
profiler/火焰圖
- profiler –使用 async-profiler 對應用采樣,生成火焰圖
options
管道
Arthas支援使用管道對上述指令的結果進行進一步的處理,如
sm java.lang.String * | grep 'index'
- grep——搜尋滿足條件的結果
- plaintext——将指令的結果去除ANSI顔色
- wc——按行統計輸出結果
背景異步任務
當線上出現偶發的問題,比如需要watch某個條件,而這個條件一天可能才會出現一次時,異步背景任務就派上用場了,詳情請參考
這裡- 使用 > 将結果重寫向到日志檔案,使用 & 指定指令是背景運作,session斷開不影響任務執行(生命周期預設為1天)
- jobs——列出所有job
- kill——強制終止任務
- fg——将暫停的任務拉到前台執行
- bg——将暫停的任務放到背景執行
Web Console
通過websocket連接配接Arthas。
Arthas Properties
以java agent方式啟動
as.sh 和 arthas-boot 技巧
- 通過
功能選擇attach的程序。select
正常情況下,每次執行
as.sh
/
arthas-boot.jar
需要選擇,或者指定PID。這樣會比較麻煩,因為每次啟動應用,它的PID會變化。
比如,已經啟動了
arthas-demo.jar
,使用
jps
指令檢視:
$ jps |
58883 arthas-demo.jar |
58884 Jps |
select
參數可以指定程序名字,非常友善。
$ ./as.sh --select arthas-demo |
Arthas script version: 3.3.6 |
[INFO] JAVA_HOME: /tmp/java/8.0.222-zulu |
Arthas home: /Users/admin/.arthas/lib/3.3.6/arthas |
Calculating attach execution time... |
Attaching to 59161 using version /Users/admin/.arthas/lib/3.3.6/arthas... |
real 0m0.572s |
user 0m0.281s |
sys 0m0.039s |
Attach success. |
telnet connecting to arthas server... current timestamp is 1594280799 |
Trying 127.0.0.1... |
Connected to localhost. |
Escape character is '^]'. |
,---. ,------. ,--------.,--. ,--. ,---. ,---. |
/ O \ | .--. ''--. .--'| '--' | / O \ ' .-' |
| .-. || '--'.' | | | .--. || .-. |`. `-. |
| | | || |\ \ | | | | | || | | |.-' | |
`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' |
wiki https://arthas.aliyun.com/doc |
tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html |
version 3.3.6 |
pid 58883 |
使用者資料回報
在
3.1.4
版本後,增加了使用者資料回報功能,友善統一做安全或者曆史資料統計。
在啟動時,指定
stat-url
,就會回報執行的每一行指令,比如:
./as.sh --stat-url 'http://192.168.10.11:8080/api/stat'
在tunnel server裡有一個示例的回報代碼,使用者可以自己在伺服器上實作。
StatController.java