arthas命令tt方法时空隧道

ぃ、小莉子 提交于 2020-08-05 20:45:35

arthas是一个Java开源诊断神器。

今天分享一个非常重要的命令tt,全称是TimeTunnel,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测。这个命令与之前讲到的arthas命令watch观察方法调用(上)arthas命令watch观察方法调用(下)从大概功能上比较相似,区别在于watch如果想发挥足够的排查作用,必需熟练掌握ognl语法,特别是高级语法这样才能从大量的请求中筛选出来自己想要的,tt命令相对简单,而且还支持录制、重放功能,可以说非常强大。在arthas运行的过程中,经过tt命令保存的方法都是可以重放的。

字段说明

表格字段 字段解释
INDEX 时间片段记录编号
TIMESTAMP 方法执行的本机时间
COST(ms) 方法执行的耗时
IS-RET 方法是否以正常返回的形式结束
IS-EXP 方法是否以抛异常的形式结束
OBJECT 执行对象的hashCode()
CLASS 执行的类名
METHOD 执行的方法名
  • 这里有个问题视频中未讲明白,hashcode()方法得到的是对象在JVM中内存地址的映射。

arthas命令tt方法时空隧道

Demo代码

package com.fun;


import com.alibaba.fastjson.JSONObject;
import com.fun.frame.httpclient.FanLibrary;
import org.apache.http.client.methods.HttpGet;

import java.util.Arrays;
import java.util.List;

public class AR extends FanLibrary {

    public static int times = 0;

    public static void main(String[] args) {

        while (true) {
            String url = "https://api.apiopen.top/getAllUrl";
            HttpGet get = getHttpGet(url);
            JSONObject response = getHttpResponse(get);
//            output(response);
            output(test());
            sleep(5000);
        }

    }

    static String test() {
        times++;
        for (int i = 0; i < 5; i++) {
            getRandomInt(100);
        }
        List list = Arrays.asList(32, 432, 432, 423, 423, 32);
        list.stream().forEach(x -> aaa(x));
        return DEFAULT_STRING + times;
    }

    static Integer aaa(Object a) {
        sleep(100);
        return 915 * 516;
    }


}

  • 郑重声明:“FunTester”首发,欢迎关注交流,禁止第三方转载。更多原创文章:FunTester十八张原创专辑,合作请联系Fhaohaizi@163.com

热文精选

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!