Arthas-Java排查神器使用

推薦使用arthas-boot.jar方式

1、下載及安裝

wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar --target-ip 0.0.0.0

arthas-boot是Arthas的啟動(dòng)程序,它啟動(dòng)后,會(huì)列出所有的Java進(jìn)程,用戶可以選擇需要診斷的目標(biāo)進(jìn)程。

特別說明:(重點(diǎn)):arthas不可以直接遠(yuǎn)程連接,啟動(dòng)arthas時(shí)輸入的ip和端口都是本機(jī)暴露給外界的ip和端口
target-ip: 如果要在其他機(jī)器使用Web Console,請(qǐng)?zhí)顚懕緳C(jī)的ip(如:192.168.33.44),此時(shí)可以訪問:http://ip:8563
windows下報(bào)錯(cuò)處理:com.sun.tools.attach.AttachNotSupportedException: no providers installed,請(qǐng)檢查<jdk>/bin/或者/<jdk>/jre/bin下是否有attach.dll文件,如果沒有請(qǐng)重新安裝jdk,本人親測(cè)版本jdk1.8.0_201。

2、命令列表

基礎(chǔ)命令

  • help——查看命令幫助信息
  • cls——清空當(dāng)前屏幕區(qū)域
  • session——查看當(dāng)前會(huì)話的信息
  • reset——重置增強(qiáng)類,將被 Arthas 增強(qiáng)過的類全部還原,Arthas 服務(wù)端關(guān)閉時(shí)會(huì)重置所有增強(qiáng)過的類
  • version——輸出當(dāng)前目標(biāo) Java 進(jìn)程所加載的 Arthas 版本號(hào)
  • history——打印命令歷史
  • quit——退出當(dāng)前 Arthas 客戶端,其他 Arthas 客戶端不受影響
  • shutdown——關(guān)閉 Arthas 服務(wù)端,所有 Arthas 客戶端全部退出
  • keymap——Arthas快捷鍵列表及自定義快捷鍵

3、進(jìn)階使用

基礎(chǔ)命令

  • help——查看命令幫助信息
  • cat——打印文件內(nèi)容,和linux里的cat命令類似
  • pwd——返回當(dāng)前的工作目錄,和linux命令類似
  • cls——清空當(dāng)前屏幕區(qū)域
  • session——查看當(dāng)前會(huì)話的信息
  • reset——重置增強(qiáng)類,將被 Arthas 增強(qiáng)過的類全部還原,Arthas 服務(wù)端關(guān)閉時(shí)會(huì)重置所有增強(qiáng)過的類
  • version——輸出當(dāng)前目標(biāo) Java 進(jìn)程所加載的 Arthas 版本號(hào)
  • history——打印命令歷史
  • quit——退出當(dāng)前 Arthas 客戶端,其他 Arthas 客戶端不受影響
  • shutdown——關(guān)閉 Arthas 服務(wù)端,所有 Arthas 客戶端全部退出
  • keymap——Arthas快捷鍵列表及自定義快捷鍵

jvm相關(guān)

  • dashboard——當(dāng)前系統(tǒng)的實(shí)時(shí)數(shù)據(jù)面板
  • thread——查看當(dāng)前 JVM 的線程堆棧信息
  • jvm——查看當(dāng)前 JVM 的信息
  • sysprop——查看和修改JVM的系統(tǒng)屬性
  • sysenv——查看JVM的環(huán)境變量
  • getstatic——查看類的靜態(tài)屬性
  • New! ognl——執(zhí)行ognl表達(dá)式

class/classloader相關(guān)

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

monitor/watch/trace相關(guān)

請(qǐng)注意,這些命令,都通過字節(jié)碼增強(qiáng)技術(shù)來實(shí)現(xiàn)的,會(huì)在指定類的方法中插入一些切面來實(shí)現(xiàn)數(shù)據(jù)統(tǒng)計(jì)和觀測(cè),因此在線上、預(yù)發(fā)使用時(shí),請(qǐng)盡量明確需要觀測(cè)的類、方法以及條件,診斷結(jié)束要執(zhí)行或?qū)⒃鰪?qiáng)過的類執(zhí)行 命令。

  • monitor——方法執(zhí)行監(jiān)控
  • watch——方法執(zhí)行數(shù)據(jù)觀測(cè)
  • trace——方法內(nèi)部調(diào)用路徑,并輸出方法路徑上的每個(gè)節(jié)點(diǎn)上耗時(shí)
  • stack——輸出當(dāng)前方法被調(diào)用的調(diào)用路徑
  • tt——方法執(zhí)行數(shù)據(jù)的時(shí)空隧道,記錄下指定方法每次調(diào)用的入?yún)⒑头祷匦畔ⅲ⒛軐?duì)這些不同的時(shí)間下調(diào)用進(jìn)行觀測(cè)

options

  • options——查看或設(shè)置Arthas全局開關(guān)

管道

Arthas支持使用管道對(duì)上述命令的結(jié)果進(jìn)行進(jìn)一步的處理,如sm java.lang.String * | grep 'index'

  • grep——搜索滿足條件的結(jié)果
  • plaintext——將命令的結(jié)果去除ANSI顏色
  • wc——按行統(tǒng)計(jì)輸出結(jié)果

后臺(tái)異步任務(wù)

當(dāng)線上出現(xiàn)偶發(fā)的問題,比如需要watch某個(gè)條件,而這個(gè)條件一天可能才會(huì)出現(xiàn)一次時(shí),異步后臺(tái)任務(wù)就派上用場(chǎng)了,詳情請(qǐng)參考這里

  • 使用 > 將結(jié)果重寫向到日志文件,使用 & 指定命令是后臺(tái)運(yùn)行,session斷開不影響任務(wù)執(zhí)行(生命周期默認(rèn)為1天)
  • jobs——列出所有job
  • kill——強(qiáng)制終止任務(wù)
  • fg——將暫停的任務(wù)拉到前臺(tái)執(zhí)行
  • bg——將暫停的任務(wù)放到后臺(tái)執(zhí)行

Web Console

通過websocket連接Arthas。

其他特性


參考文章:
1、官網(wǎng):https://alibaba.github.io/arthas
2、web Console踩坑:https://blog.csdn.net/gaoyib6/article/details/77201711

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

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

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