1、序言
在使用 Arthas 之前,当遇到 Java 线上问题时,如 CPU 飙升、负载突高、内存溢出等问题,你需要查命令,查网络,然后 jps、jstack、jmap、jhat、jstat、hprof 等一通操作。最终焦头烂额,还不一定能查出问题所在。而现在,大多数的常见问题你都可以使用 Arthas 轻松定位,迅速解决,及时止战。
2、Arthas 介绍
Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+, 采用命令行交互模式,提供 Tab 自动不全,深受开发者喜爱。在线排查问题,无需重启;动态跟踪 Java 代码;实时监控 JVM 状态。
3、Arthas 使用场景
Arthas 帮助程序员和运维人员解决了什么
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到 JVM 的实时运行状态?
- 怎么快速定位应用的热点,生成火焰图?
4、Arthas 怎么用
- 快速入门
Arthas 是一款命令行交互模式的 Java 诊断工具,由于是 Java 编写,所以可以直接下载相应 的 jar 包运行。
启动 Demo : arthas-demo 是一个简单的程序,每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果。
curl -O https://arthas.aliyun.com/arthas-demo.jar
java -jar arthas-demo.jar
arthas-boot 工程可以在官方 Github 上进行下载,如果速度较慢,可以尝试国内的码云 Gitee 下载。
# github下载
wget https://alibaba.github.io/arthas/arthas-boot.jar
# 或者 Gitee 下载
wget https://arthas.gitee.io/arthas-boot.jar
# 打印帮助信息
java -jar arthas-boot.jar -h
- 启动 arthas 选择应用java进程:
[root@localhost ~]# java -jar arthas-boot.jar --target-ip 0.0.0.0
-
web console
Arthas 目前支持 Web Console,在成功启动连接进程之后就已经自动启动,可以直接访问 http://192.168.189.131:8563/ 访问,页面上的操作模式和控制台完全一样
-
输入dashboard,按回车 /enter,会展示当前进程的信息,按 ctrl+c 可以中断执行。
[arthas@9419]$ dashboard
- 通过 thread 命令来获取到 arthas-demo 进程的 Main Class
thread 1会打印线程ID 1的栈,通常是main函数的线程。
[arthas@9419]$ thread 1 | grep main
"main" Id=1 TIMED_WAITING
at demo.MathGame.main(MathGame.java:17)
[arthas@9419]$
- 通过 jad 来反编译 Main Class
[arthas@9419]$ jad demo.MathGame
- 通过watch命令来查看demo.MathGame#primeFactors函数的返回值
[arthas@9419]$ watch demo.MathGame primeFactors returnObj
- 退出arthas
如果只是退出当前的连接,可以用quit或者exit命令