【Arthas】重要技巧

當(dāng)你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:
這個類從哪個 jar 包加載的?為什么會報各種類相關(guān)的 Exception?

安裝

curl -O https://arthas.aliyun.com/arthas-boot.jar
image.png

輸入編號進(jìn)入指定項(xiàng)目, 如13

反編譯

jad com.xxxx.web.manager.boot.PartnerWebManagerApplication
image.png

查看方法入?yún)?,返回?/h2>
watch com.xxx.web.manager.controller.ad.config.AdConfigController list returnObj
image.png

查看返回值屬性遍歷深度

watch com.xxx.web.manager.controller.ad.config.AdConfigController list returnObj -x 3
image.png

同時觀察入?yún)⒑统鰠?/h2>
watch com.xxx.web.manager.controller.ad.config.AdConfigController list {params,returnObj} -x 3
image.png
可以使用ongl條件表達(dá)式過濾指定的請求
 watch com.xxx.web.manager.controller.ad.config.AdConfigController list "{params[0],target}" "params[0]<0"
 獲取第一個參數(shù),并且條件滿足后面的條件
 
 
  watch com.xxx.web.manager.controller.ad.config.AdConfigController list "{params[0],target}"
 '{params, returnObj}' '#cost>200'
 只查看耗時大于200ms的請求
image.png

觀察表達(dá)式和條件表達(dá)式可以使用ognl表達(dá)式

查看方法調(diào)用路徑及響應(yīng)時間

 trace com.xxx.web.manager.controller.ad.config.AdConfigController list
image.png

方法被調(diào)用路徑

stack com.xxx.service.basic.ad.config.service.impl.AdConfigServiceImpl pageList

記錄下指定方法每次調(diào)用的入?yún)⒑头祷匦畔?/h2>
tt -t com.xxx.service.basic.ad.config.service.impl.AdConfigServiceImpl pageList
image.png

查看保存的方法調(diào)用列表

tt -l

根據(jù)條件搜索
tt -s 'method.name=="pageList"'

查看某一次調(diào)用的信息

tt -i 1003 -x3
image.png

不重啟服務(wù)器,動態(tài)修改代碼(添加日志)

java的方法存在方法區(qū)內(nèi),方法區(qū)里面的數(shù)據(jù)是類加載時從class文件中提取出來的,所以我們可以直接修改class文件并替換,達(dá)到熱更新的目的

修改代碼,編譯成class文件


image.png

將class 文件上傳到服務(wù)器某個目錄下面,然后執(zhí)行 retransform命令


image.png

再次調(diào)用修改后的接口,就會打印出新加的日志
image.png

查看類是從那個jar包執(zhí)行

使用sc -d 命令


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容