Arthas快速入门

1.概述

Arthas(阿尔萨斯) 能为你做什么?

图片[1]-Arthas快速入门-不念博客

Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。

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

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

运行环境要求

Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。

2.快速安装

2.1 在线安装(Linux也可以这样安装)–推荐

  • 下载jar包
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
  • 2.运行
java -jar arthas-boot.jar
图片[2]-Arthas快速入门-不念博客

注:在运行第2条命令之前,先运行一个java进程在内存中,不然会出现找不到java进程的错误

图片[3]-Arthas快速入门-不念博客

注意:如果cmd是管理员权限运行arthas-boot,那么IDEA启动也是要管理员运行程序

  • 查看安装好的目录
C:\Users\admin\.arthas\lib\3.7.2\arthas
图片[4]-Arthas快速入门-不念博客

2.2. 离线安装

  • 从Maven仓库下载全量包
curl -O -L https://maven.aliyun.com/repository/public/com/taobao/arthas/arthas-packaging/3.7.2/arthas-packaging-3.7.2-bin.zip
  • 解压后,在文件夹里有arthas-boot.jar,直接用java -jar的方式启动
java -jar arthas-boot.jar

注意:如果是Linux,可以使用以下命令解压到指定的arthas目录

unzip -d arthas arthas-packaging-3.7.2-bin.zip

发现解压后内容和在线按照内容一致

图片[5]-Arthas快速入门-不念博客

3. 卸载

3.1. 在 Linux/Unix/Mac 平台

删除下面文件:

rm -rf ~/.arthas/
rm -rf ~/logs/arthas

3.2. Windows平台

直接删除user home下面的.arthaslogs/arthas目录

  • 安装主目录
图片[6]-Arthas快速入门-不念博客
  • 日志记录目录
图片[7]-Arthas快速入门-不念博客

4. 快速入门:attach一个进程

步骤

1. 准备代码

以下是一个简单的Java程序,每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果。

代码的内容不用理会这不是现在关注的点。

public class MathGame {
    private static Random random = new Random();
    public int illegalArgumentCount = 0;

    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;
    }

    public static void main(String[] args) throws InterruptedException {
        MathGame game = new MathGame();
        do {
            game.run();
            TimeUnit.SECONDS.sleep(1L);
            System.out.println("在main函数中循环体内");
        } while (true);
    }

    public void run() throws InterruptedException {
        System.out.println("-- 计算中的函数 -- ");
        try {
            int number = random.nextInt() / 10000;
            List<Integer> primeFactors = this.primeFactors(number);
            MathGame.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);
    }
}

注意:上面代码实际上就是math-game.jar代码

图片[8]-Arthas快速入门-不念博客
2. 启动Demo
  • jar包运行
java -jar arthas-demo.jar
  • 或者idea运行步骤一代码
图片[9]-Arthas快速入门-不念博客
3. 启动arthas
  • 因为arthas-demo.jar进程打开了一个窗口,所以另开一个命令窗口执行arthas-boot.jar
  • 选择要粘附的进程:arthas-demo.jar
  • 如果端口号被占用,也可以通过以下命令换成另一个端口号执行
java -jar arthas-boot.jar --telnet-port 9998 --http-port -1

4. 通过浏览器连接arthas

Arthas目前支持Web Console,用户在attach成功之后,可以直接访问:http://127.0.0.1:3658/。

可以填入IP,远程连接其它机器上的arthas。

图片[10]-Arthas快速入门-不念博客
© 版权声明
THE END