arthas 使用指導


arthas 阿爾薩斯

這種命令行的東西首先得知道 如何使用幫助,幫助文檔最先開始用的,應該是可以在網上找到的官方文檔

文檔一:https://alibaba.github.io/arthas/index.html ,然后這個文檔只是給出了一些常用的例子,並沒有詳細的寫出每一個參數,需要使用命令行幫助才能看到完整參數及其示例

文檔二:命令行幫助,help 命令列出了當前版本可以使用的命令列表,在使用某一個命令時,不知道有哪些參數可以用時可以使用 <command> -h 查看示例及參數列表和每個參數的意思

文檔三:百度,google ,官網 github issues https://github.com/alibaba/arthas/issues

下載和安裝

curl -O https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar

初次使用時的一些問題

[ERROR] Target process 116477 is not the process using port 3658, you will connect to an unexpected process.
[ERROR] 1. Try to restart arthas-boot, select process 90686, shutdown it first with running the 'stop' command.
[ERROR] 2. Or try to use different telnet port, for example: java -jar arthas-boot.jar --telnet-port 9998 --http-port -1

這個問題初用者必出,原因為 arthas 選擇一個應用進行診斷時弄了一個 session,可以使用 arthas-client ,web arthas client 進行登錄,這個提示告訴你要先關閉以前的 arthas-boot ,或者重新選擇一個端口

你可以這么做,在 ~/.arthas/lib/3.1.7/arthas 下有一個 arthas-client.jar 使用 java -jararthas-client.jar 可以進入上次的 session ,shutdown 后就可以選擇其它的進程進行診斷了,或者你可以繼續診斷當前應用

docker 如何使用

官網已經有例子了,這樣

docker exec -it arthas-demo /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar"

常見使用示例

arthas 默認是通配符匹配,可以開啟正則匹配

用到后面,需要了解表達式核心變量 https://alibaba.github.io/arthas/advice-class.html

查詢類加載器,類和類的所有方法,類源碼

classloader 用來查詢類加載器,以樹狀結構展示類加載器 classloader -t

sc 用來查詢類,全稱為 search-class ,如要查所有的 controller ,一般取名是有規則的 sc *Controller* ,查詢單個類時,加 -d 參數可以看到詳細信息,一般用來 看這個類是哪個類加載器加載的

sm 用來查詢類的方法,全稱為 search-method ,如要查當前查到 Controller 的所有的接口,選擇某一個 Controller sm xx.xx.xx.xxxController

jad 用來在線反編譯代碼,可以用來查看線上代碼是否已經更新

查看接口出入參,並重新發起請求 tt

第一步,先監控方法 tt -t classFullName methodName ,發起請求后,會展示一個請求列表,第一列為requestId

第二步,另啟一個 arthas-client,執行 tt -i <requestId> 可以看到請求入參和出參,使用 -x 參數可以增加展示深度,看到更詳細的信息,例如:tt -i <requestId> -x 3

如果在調試,需要使用同樣的參數重新發起請求,只需要執行 tt -i <requestId> -p 就可以重新發起調用

查詢出慢方法 trace

trace classFullName methodName -n 3 '#cost > 10' 
監控方法調用 3 次,並找出花費時長超過 10ms 的節點

注:trace 只會監控一層子調用

找到 applicationContext 獲取 bean

比較通用一點的辦法是監控 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter 類的 invokeHandlerMethod 方法,因為所有的請求都會經過這里,然后這個類有一個方法是獲取 applicationContext ,可以這樣做

tt -t org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod

然后隨便發起一個請求,再使秀 ognl 表達式獲取 applicationContext  對象
之后就可以調用方法了
 tt -i 1000 -w 'target.getApplicationContext().getBean("groupMembersController").detail("1")' 

上面只是調了一個字符串的參數,如果需要調用復雜參數的方法,就需要了解下 ognl 表達式了,可以使用 ognl 表達式來創建對象

查看 Jvm 參數並設置 vmoption

可能 Jdk 提供的工具也有這樣的功能,但這個可以有網頁客戶端,使用 Jdk 提供的工具類需要在本機調用,可能由於公司用戶權限的原因可能使用不了,那這玩意就有用了。

使用這個命令必須使用 Jvm 參數的全稱,簡稱是不支持的,並且要求大小寫完全匹配,后面跟一個參數用於顯示值,兩個用於設置值

可以在這個文檔查找全稱 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BGBCIEFC

常見全稱:

-Xms and -Xmx (or: -XX:InitialHeapSize and -XX:MaxHeapSize)
-Xss (or -XX:ThreadStackSize)

引入 issues 上的一張圖來說明 arthas 的使用,可以當操作手冊 ,圖片較大,可以下載下來看,清晰點


我的博文大綱:https://blog.csdn.net/sanri1993/article/details/52201255


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM