Arthas-Java 线上问题定位处理的终极利器-快速入门

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 怎么用
  1. 快速入门
    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
  1. 启动 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/ 访问,页面上的操作模式和控制台完全一样
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sMpzPZas-1616062462924)(http://10.152.160.36/server/index.php?s=/api/attachment/visitFile/sign/dd6ae6236bac1f200ff33f50befeb388&showdoc=.jpg)]

  • 输入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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EvpOVYz8-1616062462925)(http://10.152.160.36/server/index.php?s=/api/attachment/visitFile/sign/10558fc9f726e87fbe5a19bdff3ef23c&showdoc=.jpg)]

  • 通过watch命令来查看demo.MathGame#primeFactors函数的返回值
[arthas@9419]$ watch demo.MathGame primeFactors returnObj

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H6JjhWI8-1616062462926)(http://10.152.160.36/server/index.php?s=/api/attachment/visitFile/sign/d3c2dd6c5e84d9e44f332e4986e1f4f6&showdoc=.jpg)]

  • 退出arthas
    如果只是退出当前的连接,可以用quit或者exit命令

猜你喜欢

转载自blog.csdn.net/qq_31555951/article/details/114987205