簡介
官方文檔鏈接:https://arthas.aliyun.com/doc/quick-start.html
啟動(dòng)arthas
方式一:java -jar arthas-boot
方式二:java -jar arthas-boot pid
兩種方式都可以,方式二要預(yù)先知道JAVA進(jìn)程的PID
命令列表
控制面板
適用場景
場景一:查看當(dāng)前jvm的線程執(zhí)行狀態(tài),也可以使用thread命令
場景二:查看jvm的內(nèi)存使用
示例
1dashboard

查看class源碼
適用場景
場景一:測試/生產(chǎn)環(huán)境已經(jīng)發(fā)布,方法執(zhí)行與預(yù)期不符,無法確認(rèn)類文件是否發(fā)布成功
場景二:測試/生產(chǎn)環(huán)境代碼執(zhí)行報(bào)錯(cuò),暫時(shí)無法通過IDE工具查看源碼
示例
# eg. com.demo.MainClass
jad --``source``-only com.demo.MainClass
|
監(jiān)聽方法執(zhí)行
適用場景
場景一:代碼執(zhí)行異常,暫無法通過本地IDE工具進(jìn)行DEBUG,通過日志又無法定位問題
場景二:查看方法的參數(shù)、返回結(jié)果
場景三:統(tǒng)計(jì)方法的執(zhí)行耗時(shí)
示例
準(zhǔn)備監(jiān)聽方法
# eg. com.demo.MainClass.doAnyThing()
tt -t com.demo.MainClass doAnyThing
# 監(jiān)聽通用方法可以加參數(shù)以防止方法數(shù)量過多
tt -t com.demo.MainClass doAnyThing params[0].customerId==3
查看監(jiān)聽列表
查看監(jiān)聽的方法列表
# 查看監(jiān)聽的方法列表
tt -l
# 監(jiān)聽的方法太多,只查看入?yún)ustomerId=3的方法
tt -s params[0].customerId==3
查看監(jiān)聽方法的明細(xì)
# 通過index來查看監(jiān)聽方法的詳細(xì)信息
tt -i 1000
# 只想查看入?yún)⒅械哪硞€(gè)對象,不想全量查看,可以加-w參數(shù)
tt -i 1000 -w params[0].userVO
tt -i 1000 -w returnObj.response
熱更新class文件
適用場景
生產(chǎn)環(huán)境無法隨時(shí)重啟部署,通過retransform對運(yùn)行的jvm中的class文件進(jìn)行替換,以達(dá)到不發(fā)布即可更新代碼的目的
示例
# 指定絕對的class路徑加載到j(luò)vm內(nèi)存中
retransform ``/tmp/com/example/demo/arthas/user/UserController``.class
生產(chǎn)環(huán)境的服務(wù)器一般是多臺,手動(dòng)執(zhí)行風(fēng)險(xiǎn)極高,而且屬于奇技淫巧,不推薦當(dāng)作正常發(fā)布的流程
生成JVM火焰圖
適用場景
希望觀察jvm在一定時(shí)間內(nèi)的cpu負(fù)荷
示例
# 單位:秒,執(zhí)行300秒后結(jié)動(dòng)結(jié)束,默認(rèn)采集cpu,默認(rèn)生成svg格式
profiler start --duration 300
