Alibaba开源Java诊断利器Arthas基础教程

本文介绍Arthas——一款阿里巴巴开源的Java诊断工具。通过示例程序演示如何使用Arthas进行Java应用的监控与故障排查,包括dashboard监控、线程栈跟踪、类搜索、代码反编译及方法调用观察。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Arthas 是Alibaba开源的Java诊断工具。

官网:官网
文档:文档
github: github地址

准备工作

  1. 准备arthas
    先在进入文档下载arthas的jar包:如图
    在这里插入图片描述
    下载好后解压,重点关注arthas-boot.jar的这个jar
  2. 准备测试代码
    此程序为随机生成整数,再执行因式分解,把结果打印出来。如果生成的随机数是负数,则会打印提示信息。
public class RandomNumber {
    private static Random random = new Random();
    private int illegalArgumentCount = 0;

    public static void main(String[] args) throws InterruptedException {
        RandomNumber game = new RandomNumber();
        while (true) {
            game.run();
            TimeUnit.SECONDS.sleep(1L);
        }
    }

    public void run() throws InterruptedException {
        try {
            int number = random.nextInt() / 10000;
            List<Integer> primeFactors = this.primeFactors(number);
            RandomNumber.print(number, primeFactors);
        } catch (Exception e) {
            System.out.println(String.format("illegalArgumentCount:%3d, ", this.illegalArgumentCount) + e.getMessage());
        }
    }

    public static void print(int number, List<Integer> primeFactors) {
        StringBuffer sb = new StringBuffer(number + "=");
        for (int factor : primeFactors) {
            sb.append(factor).append('*');
        }
        if (sb.charAt(sb.length() - 1) == '*') {
            sb.deleteCharAt(sb.length() - 1);
        }
        System.out.println(sb);
    }

    public List<Integer> primeFactors(int number) {
        if (number < 2) {
            ++this.illegalArgumentCount;
            throw new IllegalArgumentException("number is: " + number + ", need >= 2");
        }
        ArrayList<Integer> result = new ArrayList<Integer>();
        int i = 2;
        while (i <= number) {
            if (number % i == 0) {
                result.add(i);
                number /= i;
                i = 2;
                continue;
            }
            ++i;
        }
        return result;
    }
}

启动Arthas

  1. 先启动准备好的测试程序

  2. 然后启动arthas-boot.jar,直接cmd中使用java -jar arthas-boot.jar启动
    在这里插入图片描述

  3. 启动后如图所示:输入刚才启动的测试程序序号:3,然后回车,如有arthas的logo则启动成功.
    在这里插入图片描述

执行命令

注:可通过help进行命令查询,可Tab自动补全,兼容部分Linux命令

  1. dashboard 查看当前系统的实时数据面板。输入Q或Ctrl+C可退出dashboard命令
    在这里插入图片描述
  2. thread 1 打印线程ID为1的栈 ,Arthas支持管道可使用如:thread 1 | grep ‘main(’ 进行查找
    在这里插入图片描述
    可看到main class的路径为com.any.arthas.RandomNumber
  3. sc 查找JVM已加载的类 如:sc -d *RandomNumber
    在这里插入图片描述
  4. jad 通过这个命令可进行反编译代码 如:jad com.any.arthas.RandomNumber
    在这里插入图片描述
  5. watch 通过这个命令可以查看方法的参数/返回值/异常现象。如:watch com.any.arthas.RandomNumber 方法名 returnObj 输入Q或Ctrl+可退出
    在这里插入图片描述
  6. 退出Arthas与彻底退出Arthas
    退出:使用exit 或者 quit 命令可退出Arthas。退出后还可以再次运行arthas-boot.jar包进行连接。
    彻底退出:exitquit命令只是退出当前session,arthas server还在目标进程中运行。想要完全退出Arthas则需要执行stop命令。

如果没有使用stop命令退出而再次选择其他进程连接则会报错。
详细报错信息可自行尝试,或者看我之前发的博客:Arthas [ERROR] The telnet port 3658 is used by process

Arthas的使用在windows下与linux下使用arthas差别并不大。
基础教程就到这里,更多命令可自行查看文档。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值