1.简介
诊断Java 线上问题时,如 cpu 飙升、负载突高、内存溢出、死锁、响应慢、链路性能分析等问题,替代jps、jstack、jmap、jhat、jstat、hprof 等低效操作
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命令重写一下)退出关闭诊断,退出时 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 方法调用链
其它详情及使用案例参考:阿里Github文档https://alibaba.github.io/arthas/advanced-use.html
jwolf2 发布了78 篇原创文章 · 获赞 12 · 访问量 2万+ 私信 关注