Arthas進階學習(經常使用命令)

Step1

下載demo-arthas-spring-boot.jar,再用java -jar命令啓動:html

wget https://github.com/hengyunabc/katacoda-scenarios/raw/master/demo-arthas-spring-boot.jar

java -jar demo-arthas-spring-boot.jar --server.port=1945

  

下載了jar包,由於該項目默認是80端口,而主機上80端口已經被佔用,因此啓動時設置了端口號--server.port=1945(2019年4月5日)java

 

Step2

啓動"arthas"ios

java -jar arthas-boot.jar --target-ip 0.0.0.0

  

選擇剛纔的項目git

 

輸入"help"可查看命令github

 

Step3

sysprop

sysprop 能夠打印全部的System Properties信息。spring

 

也能夠指定單個key: sysprop java.versionapache

也能夠經過grep來過濾: sysprop | grep userbash

能夠設置新的value: sysprop testKey testValuessh

 

sysenv

sysenv 命令能夠獲取到環境變量,好比ssh登陸的ip等。jvm

 

 

jvm

jvm 命令會打印出JVM的各類詳細信息。

 

dashboard

dashboard 命令能夠查看當前系統的實時數據面板,每5s更新一次。

輸入 Q 或者 Ctrl+C 能夠退出dashboard命令

 

Step4

Tips

爲了更好使用Arthas,下面先介紹Arthas裏的一些使用技巧。

help

Arthas裏每個命令都有詳細的幫助信息。能夠用-h來查看。幫助信息裏有EXAMPLESWIKI連接。

好比:

sysprop -h

 

自動補全

Arthas支持豐富的自動補全功能,在使用有疑惑時,能夠輸入Tab來獲取更多信息。

好比輸入 sysprop java. 以後,再輸入Tab,會補全出對應的key:

 

 

readline的快捷鍵支持

Arthas支持常見的命令行快捷鍵,好比Ctrl + A跳轉行首,Ctrl + E跳轉行尾。

更多的快捷鍵能夠用 keymap 命令查看。

 

歷史命令的補全

若是想再執行以前的命令,能夠在輸入一半時,按Up/↑ 或者 Ddown/↓,來匹配到以前的命令。

好比以前執行過sysprop java.version,那麼在輸入sysprop ja以後,能夠輸入Up/↑,就會自動補全爲sysprop java.version

若是想查看全部的歷史命令,也能夠經過 history 命令查看到。

 

pipeline

Arthas支持在pipeline以後,執行一些簡單的命令,好比:

sysprop | grep java

sysprop | wc -l總共的行

 

Step5

sc/sm 查看已加載的類

下面介紹Arthas裏查找已加載類的命令。

sc

sc 命令能夠查找到全部JVM已經加載到的類

若是搜索的是接口,還會搜索全部的實現類。好比查看全部的Filter實現類:

sc javax.servlet.Filter

 

經過-d參數,能夠打印出類加載的具體信息,很方便查找類加載問題。

sc -d javax.servlet.Filter

sc支持通配,好比搜索全部的StringUtils

sc *StringUtils

 

sm

sm命令則是查找類的具體函數。好比:

sm java.math.RoundingMode

 

經過-d參數能夠打印函數的具體屬性

sm -d java.math.RoundingMode

 

也能夠查找特定的函數,好比查找構造函數:

sm java.math.RoundingMode <init>

 

 

 

Step6

Jad

能夠經過 jad 命令來反編譯代碼:

jad com.example.demo.arthas.user.UserController

 

經過--source-only參數能夠只打印出在反編譯的源代碼

jad --source-only com.example.demo.arthas.user.UserController

 

 

Step7

Ognl

在Arthas裏,有一個單獨的ognl命令,能夠動態執行代碼。

調用static函數

ognl '@java.lang.System@out.println("hello ognl")'

能夠檢查"demo-arthas-spring-boot.jar "裏的進程輸出,能夠發現打印出了hello ognl

 

獲取靜態類靜態字段

獲取UserController類裏的logger字段:

ognl -c 1be6f5c3 @com.example.demo.arthas.user.UserController@logger

 

還能夠經過-x參數控制返回值的展開層數。好比:

ognl -c 1be6f5c3 -x 2 @com.example.demo.arthas.user.UserController@logger

 

 

執行多行表達式,賦值給臨時變量,返回一個List

ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}'

  

 

更多

在Arthas裏ognl表達式是很重要的功能,在不少命令裏均可以使用ognl表達式。

一些更復雜的用法,能夠參考:




Arthas 進階的案例

 https://www.cnblogs.com/theRhyme/p/10660287.html

 

來源:https://alibaba.github.io/arthas/arthas-tutorials?language=cn&id=arthas-advanced

相關文章
相關標籤/搜索