阿里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

 

 

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