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
。
热文精选
- Linux性能监控软件netdata中文汉化版
- 图解HTTP脑图
- JMeter如何模拟不同的网络速度
- 手机号验证码登录性能测试
- 删除List中null的N种方法--最后放大招
- 写给所有人的编程思维
- 好书推荐《Java性能权威指南》
- 如何成为全栈自动化工程师
- Selenium并行测试基础
- Selenium并行测试最佳实践
来源:oschina
链接:https://my.oschina.net/u/3973795/blog/4283709