1、是什么
你是否曾遇到過生產(chǎn)環(huán)境出問題,但無法進(jìn)行問題線上定位,只能想辦法在開發(fā)環(huán)境重現(xiàn)問題???
Arthas是Alibaba開源的JAVA診斷工具。
2、可以解決什么?
(1)這個(gè)類從哪個(gè)jar包加載的?為什么會(huì)報(bào)各種類相關(guān)的Exception。
(2)更改的代碼為什么沒執(zhí)行?
(3)無法線上debug的問題
(4)線上某個(gè)數(shù)據(jù)有問題,但無法線上debug,線下無法重現(xiàn)。
(5)是否有一個(gè)全局視角來查看系統(tǒng)的運(yùn)行狀況?
(6)有什么辦法可以監(jiān)控到JVM的實(shí)時(shí)運(yùn)行狀態(tài)?
3、基本使用
(1)啟動(dòng)arthas-boot
下載arthas-boot.jar,再用java -jar啟動(dòng)
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
-h:表示輸出幫助信息
arthas-boot.jar是Arthas的啟動(dòng)程序,啟動(dòng)后,會(huì)列出所有的java進(jìn)程。
如果想跟進(jìn)某個(gè)java進(jìn)程,只需要輸入對(duì)應(yīng)的序號(hào)即可,Arthas會(huì)attach到目標(biāo)進(jìn)程上,并輸出日志。
(2)查看dashboard
輸入dashboard,會(huì)展示當(dāng)前進(jìn)程的信息
(3)通過sysenv命令獲取進(jìn)程的Main class
$ sysenv | grep MAIN
JAVA_MAIN_CLASS_71560 demo.MathGame
(4)通過jad來反編譯某個(gè)類
jad 類的全限定名
(5)watch
通過watch命令來查看某個(gè)類的某個(gè)方法的返回值
watch 類的全限定名 方法名 returnObj
例如:
watch demo.MathGame primeFactors returnObj
4、進(jìn)階使用
基礎(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快捷鍵列表及自定義快捷鍵
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)境變量
- New!getstatic——查看類的靜態(tài)屬性
class/classloader相關(guān)
- sc——查看JVM已加載的類信息
- sm——查看已加載類的方法信息
- dump——dump 已加載類的 byte code 到特定目錄
- redefine——加載外部的.class文件,redefine到JVM里
- jad——反編譯指定已加載類的源碼
- 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ì)和觀測,因此在線上、預(yù)發(fā)使用時(shí),請(qǐng)盡量明確需要觀測的類、方法以及條件,診斷結(jié)束要執(zhí)行 shutdown 或?qū)⒃鰪?qiáng)過的類執(zhí)行 reset 命令。
- monitor——方法執(zhí)行監(jiān)控
- watch——方法執(zhí)行數(shù)據(jù)觀測
- 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)行觀測
options
options——查看或設(shè)置Arthas全局開關(guān)
管道
Arthas支持使用管道對(duì)上述命令的結(jié)果進(jìn)行進(jìn)一步的處理,如sm org.Apache.log4j.Logger | grep
- grep——搜索滿足條件的結(jié)果
- plaintext——將命令的結(jié)果去除顏色
- wc——按行統(tǒng)計(jì)輸出結(jié)果
后臺(tái)異步任務(wù)
當(dāng)線上出現(xiàn)偶發(fā)的問題,比如需要watch某個(gè)條件,而這個(gè)條件一天可能才會(huì)出現(xiàn)一次時(shí),異步后臺(tái)任務(wù)就派上用場了,詳情請(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。
Web Console
其他特性
- 異步命令支持
- 執(zhí)行結(jié)果存日志
- 批處理的支持
- ognl表達(dá)式的用法說明
5、命令詳細(xì)
(1)jad
反編譯已加載類的源碼
jad 命令將 JVM 中實(shí)際運(yùn)行的 class 的 byte code 反編譯成 java 代碼,便于你理解業(yè)務(wù)邏輯;
- 在 Arthas Console 上,反編譯出來的源碼是帶語法高亮的,閱讀更方便
- 當(dāng)然,反編譯出來的 java 代碼可能會(huì)存在語法錯(cuò)誤,但不影響你進(jìn)行閱讀理解
class-pattern 類名表達(dá)式匹配
[c:] 類所屬 ClassLoader 的 hashcode
[E] 開啟正則表達(dá)式匹配,默認(rèn)為通配符匹配
1、反編譯指定方法
jad 類的全限定名 方法
例如:
- 反編譯某個(gè)類
- 反編譯某個(gè)類的某個(gè)方法
(2)watch
方法執(zhí)行數(shù)據(jù)監(jiān)測
讓你能方便的觀察到指定方法的調(diào)用情況。能觀察到的范圍為:返回值、拋出異常、入?yún)ⅲㄟ^編寫 OGNL 表達(dá)式進(jìn)行對(duì)應(yīng)變量的查看。
參數(shù):
class-pattern 類名表達(dá)式匹配
method-pattern 方法名表達(dá)式匹配
express 觀察表達(dá)式
condition-express 條件表達(dá)式
[b] 在方法調(diào)用之前觀察
[e] 在方法異常之后觀察
[s] 在方法返回之后觀察
[f] 在方法結(jié)束之后(正常返回和異常返回)觀察
[E] 開啟正則表達(dá)式匹配,默認(rèn)為通配符匹配
[x:] 指定輸出結(jié)果的屬性遍歷深度,默認(rèn)為 1
這里重點(diǎn)要說明的是觀察表達(dá)式,觀察表達(dá)式的構(gòu)成主要由 ognl 表達(dá)式組成,所以你可以這樣寫"{params,returnObj}",只要是一個(gè)合法的 ognl 表達(dá)式,都能被正常支持。
「1、觀察方法出參和返回值」
$ watch com.liusy.arthas_demo.controller.ArthasController test "{params,returnObj}" -x 2
「2、觀察方法入?yún)ⅰ?/strong>
$ watch com.liusy.arthas_demo.controller.ArthasController test "{params,returnObj}" -x 2 -b
「3、同時(shí)觀察方法調(diào)用前和方法返回后」
$ watch com.liusy.arthas_demo.controller.ArthasController test "{params,returnObj}" -x 2 -b -s
「4、調(diào)整-x的值,觀察具體的方法參數(shù)值」x表示層級(jí)數(shù)
$ watch com.liusy.arthas_demo.controller.ArthasController test "{params,returnObj}" -x 3
「5、條件表達(dá)式的例子」
$ watch com.liusy.arthas_demo.controller.ArthasController test "{params, returnObj}" "params[0].id == 1" -x 2
只有滿足條件的調(diào)用,才會(huì)有響應(yīng)
「6、觀察異常信息」
$ watch com.liusy.arthas_demo.controller.ArthasController test "{params, throwExp}" -e -x 2
「7、按照耗時(shí)進(jìn)行過濾」
$ watch com.liusy.arthas_demo.controller.ArthasController test "{params,returnObj}" #cost>200 -x 3
?
#cost>200(單位是ms)表示只有當(dāng)耗時(shí)大于200ms時(shí)才會(huì)輸出,過濾掉執(zhí)行時(shí)間小于200ms的調(diào)用
?
「8、觀察當(dāng)前對(duì)象中的全局屬性」
$ watch com.liusy.arthas_demo.controller.ArthasController test 'target'
如果想查看方法運(yùn)行前后,當(dāng)前對(duì)象中的全局屬性,可以使用target關(guān)鍵字,代表當(dāng)前對(duì)象
然后使用target.field_name訪問當(dāng)前對(duì)象的某個(gè)全局屬性
$ watch com.liusy.arthas_demo.controller.ArthasController test 'target.service'
(3)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)用鏈路上的所有性能開銷和追蹤調(diào)用鏈路。
class-pattern 類名表達(dá)式匹配
method-pattern 方法名表達(dá)式匹配
condition-express 條件表達(dá)式
[E] 開啟正則表達(dá)式匹配,默認(rèn)為通配符匹配
[n:] 命令執(zhí)行次數(shù)
#cost 方法執(zhí)行耗時(shí)
例如:
trace com.liusy.arthas_demo.controller.ArthasController test
按照耗時(shí)過濾:
trace com.liusy.arthas_demo.controller.ArthasController test #cost>1
(4)stack
輸出當(dāng)前方法被調(diào)用的調(diào)用路徑
很多時(shí)候我們都知道一個(gè)方法被執(zhí)行,但這個(gè)方法被執(zhí)行的路徑非常多,或者你根本就不知道這個(gè)方法是從那里被執(zhí)行了,此時(shí)你需要的是 stack 命令。
class-pattern 類名表達(dá)式匹配
method-pattern 方法名表達(dá)式匹配
condition-express 條件表達(dá)式
[E] 開啟正則表達(dá)式匹配,默認(rèn)為通配符匹配
[n:] 執(zhí)行次數(shù)限制
例如:
按照耗時(shí)查詢,只會(huì)打印出耗時(shí)小于30ms的堆棧情況
stack com.liusy.arthas_demo.controller.ArthasController test #cost<30
(5)sc
查看jvm已加載的類信息
Search-Class” 的簡寫,這個(gè)命令能搜索出所有已經(jīng)加載到 JVM 中的 Class 信息,這個(gè)命令支持的參數(shù)有 [d]、[E]、[f] 和 [x:]。
參數(shù)說明:
class-pattern 類名表達(dá)式匹配
method-pattern 方法名表達(dá)式匹配
[d] 輸出當(dāng)前類的詳細(xì)信息,包括這個(gè)類所加載的原始文件來源、類的聲明、加載的ClassLoader等詳細(xì)信息。如果一個(gè)類被多個(gè)ClassLoader所加載,則會(huì)出現(xiàn)多次
[E] 開啟正則表達(dá)式匹配,默認(rèn)為通配符匹配
[f] 輸出當(dāng)前類的成員變量信息(需要配合參數(shù)-d一起使用)
[x:] 指定輸出靜態(tài)變量時(shí)屬性的遍歷深度,默認(rèn)為 0,即直接使用 toString 輸出
?
class-pattern支持全限定名,如com.liusy.demo,也支持com/liusy/demo這樣的格式.
?
?
sc 默認(rèn)開啟了子類匹配功能,也就是說所有當(dāng)前類的子類也會(huì)被搜索出來,想要精確的匹配,請(qǐng)打開options disable-sub-class true開關(guān)
?
1、查看類的靜態(tài)變量信息
sc -df 類的全限定名
(6)sm
查看已加載類的方法信息
“Search-Method” 的簡寫,這個(gè)命令能搜索出所有已經(jīng)加載了 Class 信息的方法信息。
sm 命令只能看到由當(dāng)前類所聲明 (declaring) 的方法,父類則無法看到。
class-pattern 類名表達(dá)式匹配
method-pattern 方法名表達(dá)式匹配
[d] 展示每個(gè)方法的詳細(xì)信息
[E] 開啟正則表達(dá)式匹配,默認(rèn)為通配符匹配
(7)dashboard
當(dāng)前進(jìn)程的實(shí)時(shí)數(shù)據(jù)面板(包括內(nèi)存,線程等信息),按ctrl+c退出。
數(shù)據(jù)說明:
ID: Java級(jí)別的線程ID,注意這個(gè)ID不能跟jstack中的nativeID一一對(duì)應(yīng)
NAME: 線程名
GROUP: 線程組名
PRIORITY: 線程優(yōu)先級(jí), 1~10之間的數(shù)字,越大表示優(yōu)先級(jí)越高
STATE: 線程的狀態(tài)
CPU%: 線程消耗的cpu占比,采樣100ms,將所有線程在這100ms內(nèi)的cpu使用量求和,再算出每個(gè)線程的cpu使用占比。
TIME: 線程運(yùn)行總時(shí)間,數(shù)據(jù)格式為分:秒
INTERRUPTED: 線程當(dāng)前的中斷位狀態(tài)
DAEMON: 是否是daemon線程
(8)Thread
查看當(dāng)前線程信息,查看線程的堆棧。
參數(shù)說明:
id 線程id
[n:] 指定最忙的前N個(gè)線程并打印堆棧
[b] 找出當(dāng)前阻塞其他線程的線程
[i <value>] 指定cpu占比統(tǒng)計(jì)的采樣間隔,單位為毫秒
1、一鍵展示當(dāng)前最忙的前n個(gè)線程并打印堆棧。
thread -n 3
2、不帶參數(shù)時(shí),顯示所有線程的信息
3、顯示指定線程的運(yùn)行堆棧
therad id
4、找出當(dāng)前阻塞其他線程的線程
thread -b
目前只支持找出synchronized關(guān)鍵字阻塞住的線程, 如果是java.util.concurrent.Lock, 目前還不支持
5、指定采樣時(shí)間間隔
thread -i 時(shí)間
例如:thread -n 3 -i 1000
(9)jvm
查看當(dāng)前JVM信息
信息說明:
THREAD相關(guān)
COUNT: JVM當(dāng)前活躍的線程數(shù)
DAEMON-COUNT: JVM當(dāng)前活躍的守護(hù)線程數(shù)
PEAK-COUNT: 從JVM啟動(dòng)開始曾經(jīng)活著的最大線程數(shù)
STARTED-COUNT: 從JVM啟動(dòng)開始總共啟動(dòng)過的線程次數(shù)
DEADLOCK-COUNT: JVM當(dāng)前死鎖的線程數(shù)
文件描述符相關(guān)
MAX-FILE-DESCRIPTOR-COUNT:JVM進(jìn)程最大可以打開的文件描述符數(shù)
OPEN-FILE-DESCRIPTOR-COUNT:JVM當(dāng)前打開的文件描述符數(shù)
(10)sysprop
查看當(dāng)前jvm的系統(tǒng)屬性(system property)
1、查看所有屬性
sysprop
2、查看某個(gè)屬性
sysprop java.version
3、修改某個(gè)屬性值
sysprop key value
(11)sysenv
查看當(dāng)前jvm的環(huán)境屬性(system environment variables)
1、查看所有環(huán)境變量
sysenv
2、查看單個(gè)環(huán)境變量
sysenv USER
(12)getstatic
可以查看類的靜態(tài)屬性
getstatic class_name field_name
如果該靜態(tài)屬性是一個(gè)復(fù)雜對(duì)象,還可以支持在該屬性上通過ognl表示進(jìn)行遍歷,過濾,訪問對(duì)象的內(nèi)部屬性等操作。
例如,假設(shè)n是一個(gè)Map,Map的Key是一個(gè)Enum,我們想過濾出Map中Key為某個(gè)Enum的值,可以寫如下命令
$ getstatic com.alibaba.arthas.Test n 'entrySet().iterator.{? #this.key.name()=="STOP"}'
field: n
@ArrayList[
@Node[STOP=bbb],
]
(13)ognl
執(zhí)行ognl表達(dá)式
參數(shù)說明:
express 執(zhí)行的表達(dá)式
[c:] 執(zhí)行表達(dá)式的 ClassLoader 的 hashcode,默認(rèn)值是SystemClassLoader
[x] 結(jié)果對(duì)象的展開層次,默認(rèn)值1
1、調(diào)用靜態(tài)函數(shù)
ognl '@[email protected]("hello")'
2、獲取靜態(tài)類的靜態(tài)字段
ognl '@demo.MathGame@random'
3、執(zhí)行多行表達(dá)式,賦值給臨時(shí)變量,返回一個(gè)list
$ ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}'
@ArrayList[
@String[/opt/java/8.0.181-zulu/jre],
@String[OpenJDK Runtime Environment],
]
(14)dump
dump已加載類的bytecode到特定目錄
參數(shù)說明:
class-pattern 類名表達(dá)式匹配
[c:] 類所屬 ClassLoader 的 hashcode
[E] 開啟正則表達(dá)式匹配,默認(rèn)為通配符匹配
(15)classloader
查看classloader的繼承樹,urls,類加載信息
classloader 命令將 JVM 中所有的classloader的信息統(tǒng)計(jì)出來,并可以展示繼承樹,urls等。
可以讓指定的classloader去getResources,打印出所有查找到的resources的url。對(duì)于ResourceNotFoundException比較有用。
參數(shù)說明:
參數(shù)名稱 參數(shù)說明
[l] 按類加載實(shí)例進(jìn)行統(tǒng)計(jì)
[t] 打印所有ClassLoader的繼承樹
[a] 列出所有ClassLoader加載的類,請(qǐng)謹(jǐn)慎使用
[c:] ClassLoader的hashcode
[c: r:] 用ClassLoader去查找resource
1、按類加載類型查看統(tǒng)計(jì)信息
classloader
2、按類加載實(shí)例查看統(tǒng)計(jì)信息
classloader -l
3、查看ClassLoader的繼承樹
classloader -t
4、查看URLClassLoader實(shí)際的urls
classloader -c 5ffe9775
5、使用ClassLoader去查找resource
$ classloader -c 226b143b -r META-INF/MANIFEST.MF
6、 查找類的class文件:
$ classloader -c 1b6d3586 -r java/lang/String.class
(16)redefine
加載外部的.class文件,redefine jvm已加載的類。
[c:] ClassLoader的hashcode
[p:] 外部的.class文件的完整路徑,支持多個(gè)
例如:redefine -p /tmp/Test.class
(17)monitor
方法執(zhí)行監(jiān)控
對(duì)匹配 class-pattern/method-pattern的類、方法的調(diào)用進(jìn)行監(jiān)控。
monitor 命令是一個(gè)非實(shí)時(shí)返回命令.
實(shí)時(shí)返回命令是輸入之后立即返回,而非實(shí)時(shí)返回的命令,則是不斷的等待目標(biāo) Java 進(jìn)程返回信息,直到用戶輸入 Ctrl+C 為止。
服務(wù)端是以任務(wù)的形式在后臺(tái)跑任務(wù),植入的代碼隨著任務(wù)的中止而不會(huì)被執(zhí)行,所以任務(wù)關(guān)閉后,不會(huì)對(duì)原有性能產(chǎn)生太大影響,而且原則上,任何Arthas命令不會(huì)引起原有業(yè)務(wù)邏輯的改變。
監(jiān)控維度:
timestamp 時(shí)間戳
class Java類
method 方法(構(gòu)造方法、普通方法)
total 調(diào)用次數(shù)
success 成功次數(shù)
fail 失敗次數(shù)
rt 平均RT
fail-rate 失敗率
參數(shù):
class-pattern 類名表達(dá)式匹配
method-pattern 方法名表達(dá)式匹配
[E] 開啟正則表達(dá)式匹配,默認(rèn)為通配符匹配
[c:] 統(tǒng)計(jì)周期,默認(rèn)值為120秒
例如:
$ monitor -c 5 com.alibaba.sample.petstore.web.store.module.screen.ItemList execute
(18)tt
方法執(zhí)行數(shù)據(jù)的時(shí)空隧道,記錄下指定方法每次調(diào)用的入?yún)⒑头祷匦畔ⅲ⒛軐?duì)這些不同的時(shí)間下調(diào)用進(jìn)行觀測
watch 雖然很方便和靈活,但需要提前想清楚觀察表達(dá)式的拼寫,這對(duì)排查問題而言要求太高,因?yàn)楹芏鄷r(shí)候我們并不清楚問題出自于何方,只能靠蛛絲馬跡進(jìn)行猜測。
這個(gè)時(shí)候如果能記錄下當(dāng)時(shí)方法調(diào)用的所有入?yún)⒑头祷刂怠伋龅漠惓?huì)對(duì)整個(gè)問題的思考與判斷非常有幫助。
于是乎,TimeTunnel 命令就誕生了。
- 命令參數(shù)解析
- -t
tt 命令有很多個(gè)主參數(shù),-t 就是其中之一。這個(gè)參數(shù)的表明希望記錄下類 *Test 的 print 方法的每次執(zhí)行情況。
- -n 3
當(dāng)你執(zhí)行一個(gè)調(diào)用量不高的方法時(shí)可能你還能有足夠的時(shí)間用 CTRL+C 中斷 tt 命令記錄的過程,但如果遇到調(diào)用量非常大的方法,瞬間就能將你的 JVM 內(nèi)存撐爆。
此時(shí)你可以通過 -n 參數(shù)指定你需要記錄的次數(shù),當(dāng)達(dá)到記錄次數(shù)時(shí) Arthas 會(huì)主動(dòng)中斷tt命令的記錄過程,避免人工操作無法停止的情況。
INDEX 時(shí)間片段記錄編號(hào),每一個(gè)編號(hào)代表著一次調(diào)用,后續(xù)tt還有很多命令都是基于此編號(hào)指定記錄操作,非常重要。
TIMESTAMP 方法執(zhí)行的本機(jī)時(shí)間,記錄了這個(gè)時(shí)間片段所發(fā)生的本機(jī)時(shí)間
COST(ms) 方法執(zhí)行的耗時(shí)
IS-RET 方法是否以正常返回的形式結(jié)束
IS-EXP 方法是否以拋異常的形式結(jié)束
OBJECT 執(zhí)行對(duì)象的hashCode(),注意,曾經(jīng)有人誤認(rèn)為是對(duì)象在JVM中的內(nèi)存地址,但很遺憾他不是。但他能幫助你簡單的標(biāo)記當(dāng)前執(zhí)行方法的類實(shí)體
CLASS 執(zhí)行的類名
METHOD 執(zhí)行的方法名
(19)options
全局開關(guān)
名稱默認(rèn)值描述unsafefalse是否支持對(duì)系統(tǒng)級(jí)別的類進(jìn)行增強(qiáng),打開該開關(guān)可能導(dǎo)致把JVM搞掛,請(qǐng)慎重選擇!dumpfalse是否支持被增強(qiáng)了的類dump到外部文件中,如果打開開關(guān),class文件會(huì)被dump到/${Application dir}/arthas-class-dump/目錄下,具體位置詳見控制臺(tái)輸出batch-re-transformtrue是否支持批量對(duì)匹配到的類執(zhí)行retransform操作json-formatfalse是否支持json化的輸出disable-sub-classfalse是否禁用子類匹配,默認(rèn)在匹配目標(biāo)類的時(shí)候會(huì)默認(rèn)匹配到其子類,如果想精確匹配,可以關(guān)閉此開關(guān)debug-for-asmfalse打印ASM相關(guān)的調(diào)試信息save-resultfalse是否打開執(zhí)行結(jié)果存日志功能,打開之后所有命令的運(yùn)行結(jié)果都將保存到/home/admin/logs/arthas/arthas.log中job-timeout1d異步后臺(tái)任務(wù)的默認(rèn)超時(shí)時(shí)間,超過這個(gè)時(shí)間,任務(wù)自動(dòng)停止;比如設(shè)置 1d, 2h, 3m, 25s,分別代表天、小時(shí)、分、秒
例如,想打開執(zhí)行結(jié)果存日志功能,輸入如下命令即可:
$ options save-result true






