爲了更好使用Arthas,下面先介紹Arthas裏的一些使用技巧。
help
Arthas裏每個命令都有詳細的幫助信息。能夠用-h
來查看。幫助信息裏有EXAMPLES
和WIKI
連接。
好比:
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
表達式。
一些更復雜的用法,能夠參考:
- OGNL特殊用法請參考:https://github.com/alibaba/arthas/issues/71
- OGNL表達式官方指南:https://commons.apache.org/proper/commons-ognl/language-guide.html
Arthas 進階的案例
https://www.cnblogs.com/theRhyme/p/10660287.html
來源:https://alibaba.github.io/arthas/arthas-tutorials?language=cn&id=arthas-advanced