Arthas快速入门

2024年 3月 20日 69.2k 0

1.概述

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

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

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

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

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

    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:Usersadmin.arthaslib3.7.2arthas

    图片[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快速入门-不念博客

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论