Arthas(阿爾薩斯)- 阿里開源的Java在線診斷工具(理論篇)

Arthas 是什麼?

Arthas 是 阿里在 2018 年 9 月開源的 Java 診斷工具。支持 JDK6+, 採用命令行交互模式,提供 Tab 自動補全,可以方便地定位和診斷線上程序運行問題。

當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:

這個類從哪個 jar 包加載的?爲什麼會報各種類相關的 Exception?
我改的代碼爲什麼沒有執行到?難道是我沒 commit?分支搞錯了?
遇到問題無法在線上 debug,難道只能通過加日誌再重新發布嗎?
線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!
是否有一個全局視角來查看系統的運行狀況?
有什麼辦法可以監控到JVM的實時運行狀態?
怎麼快速定位應用的熱點,生成火焰圖?

安裝和啓動

curl -O https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar(使用和目標進程一致的用戶啓動,否則可能attach失敗)

在這裏插入圖片描述
如果attach不上目標進程,可以查看~/logs/arthas/ 目錄下的日誌。
如果下載速度比較慢,可以使用aliyun的鏡像:java -jar arthas-boot.jar --repo-mirror aliyun --use-http
java -jar arthas-boot.jar -h 打印更多參數信息

基礎命令

help——查看命令幫助信息
cat——打印文件內容,和linux裏的cat命令類似
grep——匹配查找,和linux裏的grep命令類似
pwd——返回當前的工作目錄,和linux命令類似
cls——清空當前屏幕區域
session——查看當前會話的信息
reset——重置增強類,將被 Arthas 增強過的類全部還原,Arthas 服務端關閉時會重置所有增強過的類
version——輸出當前目標 Java 進程所加載的 Arthas 版本號
history——打印命令歷史
quit——退出當前 Arthas 客戶端,其他 Arthas 客戶端不受影響
stop/shutdown——關閉 Arthas 服務端,所有 Arthas 客戶端全部退出
keymap——Arthas快捷鍵列表及自定義快捷鍵

jvm相關命令

dashboard——當前系統的實時數據面板
thread——查看當前 JVM 的線程堆棧信息
jvm——查看當前 JVM 的信息
sysprop——查看和修改JVM的系統屬性
sysenv——查看JVM的環境變量
vmoption——查看和修改JVM裏診斷相關的option
logger——查看和修改logger
getstatic——查看類的靜態屬性
ognl——執行ognl表達式
mbean——查看 Mbean 的信息
heapdump——dump java heap, 類似jmap命令的heap dump功能

class/classloader相關命令

sc——查看JVM已加載的類信息
sm——查看已加載類的方法信息
jad——反編譯指定已加載類的源碼
mc——內存編繹器,內存編繹.java文件爲.class文件
redefine——加載外部的.class文件,redefine到JVM裏
dump——dump 已加載類的 byte code 到特定目錄
classloader——查看classloader的繼承樹,urls,類加載信息,使用classloader去getResource

monitor/watch/trace相關命令

monitor——方法執行監控
watch——方法執行數據觀測
trace——方法內部調用路徑,並輸出方法路徑上的每個節點上耗時
stack——輸出當前方法被調用的調用路徑
tt——方法執行數據的時空隧道,記錄下指定方法每次調用的入參和返回信息,並能對這些不同的時間下調用進行觀測

注意:這些命令都是通過字節碼增強技術來實現的,會在指定類的方法中插入一些切面來實現數據統計和觀測,因此在線上或者預發佈環境使用時,請儘量明確需要觀測的類、方法以及條件,診斷結束要執行 shutdown 或將增強過的類執行 reset 命令。

profiler/火焰圖

profiler–使用async-profiler對應用採樣,生成火焰圖

用法:
1、啓動profiler。默認情況下,生成的是cpu的火焰圖,即event爲cpu。可用–event參數來指定

$ profiler start
Started [cpu] profiling

2、查看profiler狀態。可以查看當前profiler在採樣哪種event和採樣時間

$ profiler status
[cpu] profiling is running for 40 seconds

3、獲取已採集的sample的數量

$ profiler getSamples
232

4、停止profiler。默認情況下,生成svg格式結果保存到應用工作目錄的arthas-output目錄,可用–file參數指定

$ profiler stop
profiler output file: /tmp/demo/arthas-output/20200417-135546.svg
OK
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章