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
。