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