Java 诊断工具 Arthas

  1. 安装
    1. 在线
    2. 离线
  2. 入门
    1. dashboard
    2. thread
    3. watch
    4. jvm

Ø 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
Ø 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
Ø 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
Ø 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
Ø 是否有一个全局视角来查看系统的运行状况?
Ø 有什么办法可以监控到JVM的实时运行状态?

安装

在线

直接下载 arthas-boot.jar 程序

curl -O https://arthas.aliyun.com/arthas-boot.jar

启动程序(首次启动后的使用过程中会自动下载必要资源)

java -jar arthas-boot.jar

离线

访问 https://github.com/alibaba/arthas/releases 选择最新版本

解压后,使用 java -jar arthas-boot.jar 启动

入门

在程序启动后,arthas 会找出当前 jvm 中的 java 程序

输入 1 代表进入第一个程序

dashboard

输入 dashboard,按回车 /enter,会展示当前进程的信息,按 ctrl+c 可以中断执行。

ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应
NAME: 线程名
GROUP: 线程组名
PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高
STATE: 线程的状态
CPU%: 线程消耗的cpu占比,采样100ms,将所有线程在这100ms内的cpu使用量求和,再算出每个线程的cpu使用占比。
TIME: 线程运行总时间,数据格式为分:秒
INTERRUPTED: 线程当前的中断位状态
DAEMON: 是否是daemon线程

thread

输出最忙的前 3 个线程并打印堆栈

thread -n 3

打印线程 ID=1 的栈,通常是 main 函数的线程。

thread 1

打印线程 ID=1 的栈,并且过滤出含 ‘main(‘ 的

thread 1 | grep 'main('

列出1000ms内最忙的3个线程栈

thread -n 3 -i 1000

watch

查看 com.demo.MathGame#primeFactors 函数的返回值

watch com.demo.MathGame primeFactors returnObj

查看 com.demo.MathGame#primeFactors 函数的入参和返回值

watch com.demo.MathGame primeFactors "{params, returnObj}" -x 2 -b

jvm

查看当前JVM信息


转载请注明来源。 欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。 可以在下面评论区评论,也可以邮件至 sharlot2050@foxmail.com。

文章标题:Java 诊断工具 Arthas

字数:536

本文作者:夏来风

发布时间:2020-11-18, 23:37:24

原始链接:http://www.demo1024.com/blog/arthas/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。