阿里Java项目诊断利器Arthas体验https://alibaba.github.io/arthas/advanced-use.html

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万+ 私信 关注

相关文章

developer-roadmap —— 提供最全的开发者技术路线指南。前端...
一个极简的文件分享工具,无需注册且没有广告即可生成共享下...
收集 Github、Gitee优秀的开源项目,并进行归类整理。项目地...
大家好,我是 Java陈序员,我们有时会搭建一个属于自己的网站...
一个提供交互式的Web UI用于生成兼容MyBatisPlus框架的相关功...
大家好,我是 Java 陈序员。权限认证是我们日常开发绕不过的...