Alibaba开源的Java诊断工具Arthas-入门教程

官网:https://arthas.aliyun.com/
官方文档:https://arthas.aliyun.com/doc/
git仓库:https://github.com/alibaba/arthas/releases

一、为什么用Arthas

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?

我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?

遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?

线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!

是否有一个全局视角来查看系统的运行状况?

有什么办法可以监控到JVM的实时运行状态?

怎么快速定位应用的热点,生成火焰图?

怎样直接从JVM内查找某个类的实例?

Arthas支持JDK 6+,支持Linux/Mac/Windows,

二、官方文档

  • 首页
  • English Docs
  • 在线教程(katacoda)
  • 在线教程(阿里云)
  • 安装
  • 下载
  • 快速入门
  • 进阶使用
  • 命令列表
  • WebConsole
  • Arthas Tunnel
  • Http API
  • Docker
  • Arthas Spring Boot Starter
  • IDEA 插件
  • 用户案例
  • FAQ/常见问题
  • Star me at GitHub
  • 编译调试/参与贡献
  • Release Notes
  • QQ群/钉钉群

三、官网基础教程

示例:https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn
在这里插入图片描述

本次学习到的指令有

  • 查看实时数据面板命令-dashboard
  • 查看线程栈命令-thread
  • 查看JVM里已加载的类命令-sc
  • 反编译代码命令-jad
  • 查看函数的参数/返回值/异常信息命令-watch
  • 搜索内存对象命令-vmtool
  • 退出Arthas命令-exit/stop

1、启动一个示例程序

wget https://arthas.aliyun.com/math-game.jar
java -jar math-game.jar

2、启动arthas-boot

wget https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

3、根据提示选择要诊断的进程1

[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 72 math-game.jar

选择第一个进程,输入 1 ,再Enter/回车:

Attach成功之后,会打印Arthas LOGO。输入 help 可以获取到更多的帮助信息。
在这里插入图片描述

4、查看实时数据面板命令-dashboard

# 输入dashboard 回车
dashboard

显示如下
在这里插入图片描述
输入 Q+回车 或者 Ctrl+C 可以退出dashboard命令

5、查看线程栈命令-thread

thread 1 命令会打印线程ID 1的栈。

Arthas支持管道,可以用 thread 1 | grep ‘main(’ 查找到main class。

可以看到main class是demo.MathGame:

$ thread 1 | grep 'main('
    at demo.MathGame.main(MathGame.java:17)

6、查看JVM里已加载的类命令-sc

sc -d *MathGame

在这里插入图片描述

7、反编译代码命令-jad

# 输入如下命令回车之后即可看到源码
jad demo.MathGame

8、查看函数的参数/返回值/异常信息命令-watch

通过watch命令可以查看函数的参数/返回值/异常信息。

watch demo.MathGame primeFactors returnObj

输入 Q 或者 Ctrl+C 退出watch命令。

9、搜索内存对象命令-vmtool

vmtool --action getInstances --className java.lang.String --limit 10

在这里插入图片描述

10、退出Arthas命令-exit/stop

用 exit 或者 quit 命令可以退出Arthas。

退出Arthas之后,还可以再次用 java -jar arthas-boot.jar 来连接。

彻底退出Arthas
exit/quit命令只是退出当前session,arthas server还在目标进程中运行。

想完全退出Arthas,可以执行 stop 命令。

猜你喜欢

转载自blog.csdn.net/Blueeyedboy521/article/details/124466543