1. 程式人生 > >Arthas進階學習(常用命令)

Arthas進階學習(常用命令)

全功能 介紹 令行 col lan .org 動態 println execute

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

Step1

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

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日)

Step2

啟動"arthas"

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

  

選擇剛才的項目

輸入"help"可查看命令

技術分享圖片

Step3

sysprop

sysprop 可以打印所有的System Properties信息。

技術分享圖片

也可以指定單個key: sysprop java.version

也可以通過grep來過濾: sysprop | grep user

可以設置新的value: sysprop testKey testValue

sysenv

sysenv 命令可以獲取到環境變量,比如ssh登錄的ip

等。

技術分享圖片

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 ‘@[email protected]("hello ognl")‘

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

技術分享圖片

獲取靜態類靜態字段

獲取UserController類裏的logger字段:

ognl -c 1be6f5c3 @[email protected]

技術分享圖片

還可以通過-x參數控制返回值的展開層數。比如:

ognl -c 1be6f5c3 -x 2 @[email protected]

技術分享圖片

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

ognl ‘#[email protected]@getProperty("java.home"), #[email protected]@getProperty("java.runtime.name"), {#value1, #value2}‘

  

技術分享圖片

更多

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

一些更復雜的用法,可以參考:

  • OGNL特殊用法請參考:https://github.com/alibaba/arthas/issues/71
  • OGNL表達式官方指南:https://commons.apache.org/proper/commons-ognl/language-guide.html



Arthas 進階的案例

Arthas進階學習(常用命令)