阿里Java項目診斷利器Arthas體驗https://alibaba.github.io/arthas/advanced-use.html

1.簡介

推薦一個阿里近期開源的一個線上Java項目診斷工具,可用於項目代碼問題排查,jvm診斷,調用鏈路性能分析調優,死鎖,死循環CPU飆升,在線反編譯,方法出入參輸出等功能

2.下載與啓停

下載:wget https://arthas.gitee.io/arthas-boot.jar

啓動並選擇需要診斷的非docker部署的Java項目:

# 運行方式1,先運行,在選擇 Java 進程 PID
java -jar arthas-boot.jar
# 選擇進程(輸入[]內編號(不是PID)回車)
[INFO] arthas-boot version: 3.1.4
[INFO] Found existing java process, please choose one and hit RETURN.
* [1]: 11616 com.Arthas
  [2]: 8676
  [3]: 16200 org.jetbrains.jps.cmdline.Launcher
  [4]: 21032 org.jetbrains.idea.maven.server.RemoteMavenServer

# 運行方式2,運行時選擇 Java 進程 PID
java -jar arthas-boot.jar [PID]

# 其他用法
EXAMPLES:
  java -jar arthas-boot.jar <pid>
  java -jar arthas-boot.jar --target-ip 0.0.0.0
  java -jar arthas-boot.jar --telnet-port 9999 --http-port -1
  java -jar arthas-boot.jar --tunnel-server 'ws://192.168.10.11:7777/ws'
  java -jar arthas-boot.jar --tunnel-server 'ws://192.168.10.11:7777/ws'
--agent-id bvDOe8XbTM2pQWjF4cfw
  java -jar arthas-boot.jar --stat-url 'http://192.168.10.11:8080/api/stat'
  java -jar arthas-boot.jar -c 'sysprop; thread' <pid>
  java -jar arthas-boot.jar -f batch.as <pid>
  java -jar arthas-boot.jar --use-version 3.1.4
  java -jar arthas-boot.jar --versions
  java -jar arthas-boot.jar --session-timeout 3600
  java -jar arthas-boot.jar --attach-only
  java -jar arthas-boot.jar --repo-mirror aliyun --use-http

停止:stop(推薦)或shutdown(容易誤操作,不要使用shutdown命令!!!!,血的教訓,最好是把shutdown命令重寫一下)退出關閉診斷,退出時 Arthas 同時自動重置所有增強過的類 ;

docker容器內的Java項目診斷要在容器裏進行:

方式1:進入容器並下載啓動:docker exec -it  ${containerId} /bin/bash -c "wget https://alibaba.github.io/arthas/arthas-boot.jar && java -jar arthas-boot.jar"

方式2:從宿主機copy阿爾薩斯進容器並啓動:docker cp arthas-boot.jar ${containerId}:/ && docker exec -it ${containerId} /bin/bash -c "java -jar arthas-boot.jar"

方式3:添加到鏡像裏,Dockerfile追加: COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas

3.診斷命令

dashboard命令,概覽線程狀態,CPU與耗時等,堆實時使用情況,GC等,

 

jvm 打印jvm詳情

thread 122 查看指定線程堆棧  

thread -n 3 批量查看CPU消耗topN的線程堆棧(長時間高CPU可能有死循環);

thread --state BLOCKED(長時間BLOCKED可能死鎖) 查看指定狀態的線程及狀態分組統計

jad  com.xxx.ServiceOrderImpl [generateOrder] 反編譯指定文件,可以指定到具體方法

 trace   com.xxx.ServiceOrderController alipay  -n  3 調用鏈路追蹤, 性能分析,未排除trace本身的性能消耗

watch   com.xxx.ServiceOrderController   alipay   '{params[0],params[1],returnObj}'  打印方法出入參

stack  com.xxx.ServiceOrderController   alipay  方法調用鏈

案例線上權限AOP失效,從trace可分析最後執行到66行,後面代碼沒有執行,瞬間定位問題,trace命令也常用於鏈路性能瓶頸分析。

以上是比較實用的幾個,其它詳情及使用案例參考:阿里Github文檔https://alibaba.github.io/arthas/advanced-use.html

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章