Java之Arthas工具

1. Arthas簡(jiǎn)介

Arthas(阿爾薩斯)是Alibaba開(kāi)源的Java診斷工具??梢栽诰€排查問(wèn)題,不需要重啟JVM,動(dòng)態(tài)跟蹤Java代碼,實(shí)時(shí)監(jiān)控JVM狀態(tài)等。
官方地址:https://alibaba.github.io/arthas/

1.1 Arthas主要解決的問(wèn)題:
  • a. 這個(gè)類從哪個(gè) jar 包加載的?為什么會(huì)報(bào)各種類相關(guān)的 Exception?
  • b. 我改的代碼為什么沒(méi)有執(zhí)行到?難道是我沒(méi) commit?分支搞錯(cuò)了?
  • c.遇到問(wèn)題無(wú)法在線上 debug,難道只能通過(guò)加日志再重新發(fā)布嗎?
  • d.線上遇到某個(gè)用戶的數(shù)據(jù)處理有問(wèn)題,但線上同樣無(wú)法 debug,線下無(wú)法重!
  • e.是否有一個(gè)全局視角來(lái)查看系統(tǒng)的運(yùn)行狀況?
  • f.有什么辦法可以監(jiān)控到JVM的實(shí)時(shí)運(yùn)行狀態(tài)?
  • g.怎么快速定位應(yīng)用的熱點(diǎn),生成火焰圖?
    備注:轉(zhuǎn)自官網(wǎng)
1.2 Arthas 基礎(chǔ)命令
  • help——查看命令幫助信息;
  • cls——清空當(dāng)前屏幕區(qū)域;
  • session——查看當(dāng)前會(huì)話的信息;
  • reset ——重置增強(qiáng)類,將被 Arthas 增強(qiáng)過(guò)的類全部還原,Arthas 服務(wù)端關(guān)閉時(shí)會(huì)重置所有增強(qiáng)過(guò)的類;
  • version——輸出當(dāng)前目標(biāo) Java 進(jìn)程所加載的 Arthas 版本號(hào);
  • history——打印命令歷史;
  • quit——退出當(dāng)前 Arthas 客戶端,其他 Arthas 客戶端不受影響;
  • stop——關(guān)閉 Arthas 服務(wù)端,所有 Arthas 客戶端全部退出;
  • keymap ——Arthas快捷鍵列表及自定義快捷鍵;
    備注:轉(zhuǎn)自官網(wǎng)

2 Arthas 常用命令

2.1 dashboard

顯示當(dāng)前系統(tǒng)的實(shí)時(shí)數(shù)據(jù)面板,ctrl + c退出。
主要顯示線程ID(和jstack的nativeID不一致),線程名,線程優(yōu)先級(jí),線程狀態(tài),CPU消耗,運(yùn)行時(shí)間,是否daemon等。

2.2 thread

查看線程信息,如堆棧,CPU消耗等
thread 顯示所有線程的信息;
thread 34453 顯示線程34453的信息;
thread -n 5 顯示當(dāng)前最忙的5個(gè)線程打?。?br> thread -b 顯示堵塞其他線程的線程;
thread -n 5 -i 1000 顯示當(dāng)前最忙的5個(gè)線程打印,采樣時(shí)間間隔為1秒;
thread -state WAITING 顯示指定WAITING 狀態(tài)的線程。

2.3 jvm

顯示當(dāng)前JVM的信息,比JVM自帶的功能強(qiáng)大。

2.4 redefine

加載外部的.class,熱替換原來(lái)的JVM已經(jīng)加載的類。
限制:
1.新Class不可增加field和method;
2.正在執(zhí)行的方法,沒(méi)有退出不會(huì)生效;
3.被替換的舊類不可恢復(fù)。

2.5 jad

反編譯已經(jīng)加載類的源碼,生成.java文件,支持類名正則表達(dá)式。
示例:
jad java.lang.String

2.6 sc

sc(Search Class)查看已經(jīng)被JVM加載的類信息,支持類名正則表達(dá)式。
示例:
sc java.lang.String

2.7 sysprop

查看當(dāng)前JVM的系統(tǒng)屬性(System Property)。

2.8 sysenv

查看當(dāng)前JVM的環(huán)境屬性(System Environment Variables)。

2.9 vmoption

查看,更新VM診斷相關(guān)的參數(shù)。

2.10 logger

查看logger信息,更新logger level。

2.11 Mbean

查看 Mbean 的信息。

2.12 sm

“Search-Method” 的簡(jiǎn)寫(xiě),這個(gè)命令能搜索出所有已經(jīng)加載了 Class 信息的方法信息。

2.12 dump

dump 已加載類的 bytecode 到特定目錄

2.13 heapdump

dump JVM堆, 類似jmap命令的heap dump功能。

2.14 classloader

查看JVM 中所有的classloader的信息統(tǒng)計(jì)出來(lái),并可以展示繼承樹(shù),urls等。

2.15 mc

Memory Compiler/內(nèi)存編譯器,編譯.java文件生成.class。

2.16 mcmonitor

一個(gè)非實(shí)時(shí)返回命令,對(duì)匹配 class-pattern/method-pattern的類、方法的調(diào)用進(jìn)行監(jiān)控。

2.17 watch

方法執(zhí)行數(shù)據(jù)觀測(cè),讓你能方便的觀察到指定方法的調(diào)用情況。能觀察到的范圍為:返回值、拋出異常、入?yún)?,通過(guò)編寫(xiě) OGNL 表達(dá)式進(jìn)行對(duì)應(yīng)變量的查看。

2.18 trace

方法內(nèi)部調(diào)用路徑,并輸出方法路徑上的每個(gè)節(jié)點(diǎn)上耗時(shí)。trace命令能主動(dòng)搜索 class-pattern/method-pattern對(duì)應(yīng)的方法調(diào)用路徑,渲染和統(tǒng)計(jì)整個(gè)調(diào)用鏈路上的所有性能開(kāi)銷和追蹤調(diào)用鏈路。

2.19 stack

輸出當(dāng)前方法被調(diào)用的調(diào)用路徑。很多時(shí)候我們都知道一個(gè)方法被執(zhí)行,但這個(gè)方法被執(zhí)行的路徑非常多,或者你根本就不知道這個(gè)方法是從那里被執(zhí)行了,此時(shí)你需要的是 stack 命令。

2.20 tt

TimeTunnel 方法執(zhí)行數(shù)據(jù)的時(shí)空隧道,記錄下指定方法每次調(diào)用的入?yún)⒑头祷匦畔ⅲ⒛軐?duì)這些不同的時(shí)間下調(diào)用進(jìn)行觀測(cè)。

2.21 profiler

profiler action [actionArg]

profiler 命令支持生成應(yīng)用熱點(diǎn)的火焰圖。本質(zhì)上是通過(guò)不斷的采樣,然后把收集到的采樣結(jié)果生成火焰圖。

最后編輯于
?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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