「原创声明:保留所有权利,禁止转载」
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
。
热文精选
TesterHome 为用户提供「保留所有权利,禁止转载」的选项。
除非获得原作者的单独授权,任何第三方不得转载标注了「原创声明:保留所有权利,禁止转载」的内容,否则均视为侵权。
具体请参见TesterHome 知识产权保护协议。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。