Arthas進階學習(常用命令)
來源: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
來查看。幫助信息裏有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 ‘@[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進階學習(常用命令)