• Arthas的基础学习


     下载与安装 

    wget https://alibaba.github.io/arthas/arthas-boot.jar
    java -jar arthas-boot.jar
    

      

    启动

    查看启动的帮助信息:

    java -jar arthas-boot.jar -h
    

      

    注意:arthas目前只支持本地调试(即你本机的arthas无法调试另一台机器上的Java进程)。

    一个小例子

    下载一个demo并启动这个demo项目

    wget https://alibaba.github.io/arthas/arthas-demo.jar
    java -jar arthas-demo.jar
    

      

    再启动"arthas"

    java -jar arthas-boot.jar
    

      

    接着输入"1",表示你想要查看"arthas-demo"

    此时,进入了"arthas"查看"arthas-demo"的控制台

    输入"dashboard"

    每5s会更新信息

    "Ctrl+C"退出dashboard

    通过thread命令来获取到arthas-demo进程的Main Class

    thread 1
    

      

    thread 1 | grep 'main('
    

      

    通过jad来反编译Main Class

    jad 包名.类名
    

      

    $ jad demo.MathGame
     
    ClassLoader:
    +-sun.misc.Launcher$AppClassLoader@3d4eac69
      +-sun.misc.Launcher$ExtClassLoader@66350f69
     
    Location:
    /tmp/arthas-demo.jar
     
    /*
     * Decompiled with CFR 0_132.
     */
    package demo;
     
    import java.io.PrintStream;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Random;
    import java.util.concurrent.TimeUnit;
     
    public class MathGame {
        private static Random random = new Random();
        private int illegalArgumentCount = 0;
     
        public static void main(String[] args) throws InterruptedException {
            MathGame game = new MathGame();
            do {
                game.run();
                TimeUnit.SECONDS.sleep(1L);
            } while (true);
        }
     
        public void run() throws InterruptedException {
            try {
                int number = random.nextInt();
                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 + "=");
            Iterator<Integer> iterator = primeFactors.iterator();
            while (iterator.hasNext()) {
                int factor = iterator.next();
                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;
        }
    }
     
    Affect(row-cnt:1) cost in 970 ms.

    watch

    watch 包名.类名 方法名 returnObj
    

     

    多使用"tab"键,会自动补全。

    通过watch命令来查看demo.MathGame#primeFactors函数当前的返回值,注意是当前,如果该函数没有被执行,就不会有信息输出

    更多的功能可以查看进阶使用

    Sc

    可以通过 sc 命令来查找JVM里已加载的类:

     退出arthas

    如果只是退出当前的连接,可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。

    如果想完全退出arthas,可以执行shutdown命令。

    来源:https://alibaba.github.io/arthas/install-detail.html

  • 相关阅读:
    传输对象模式
    服务定位器模式
    拦截过滤器模式
    前端控制器模式
    数据访问对象模式
    组合实体模式
    业务代表模式
    MVC 模式
    访问者模式
    模板模式
  • 原文地址:https://www.cnblogs.com/theRhyme/p/10658218.html
Copyright © 2020-2023  润新知