java 方法 链路 trace_arthas命令trace追踪方法链路
“ arthas是一个Java开源诊断神器。
今天分享一个非常重要的命令trace,官网定义这个方法的功能如下:方法内部调用路径,并输出方法路径上的每个节点上耗时 trace命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。
trace一些高级用法也是离不开ognl语法支持,有兴趣的童鞋可以多去研究研究ognl的语法。trace对于lambda表达式支持不好。
效果展示
[arthas@71728]$ trace com.fun.frame.httpclient.FanLibrary getHttpResponse
Press Q or Ctrl+C to abort.
Affect(class-cnt:2 , method-cnt:1) cost in 107 ms.
`---ts=2020-05-16 14:38:18;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@14dad5dc
`---[49.749941ms] com.fun.frame.httpclient.FanLibrary:getHttpResponse()
+---[0.100454ms] com.fun.frame.httpclient.FanLibrary:isRightRequest() #322
+---[0.732549ms] com.fun.frame.httpclient.FanLibrary:beforeRequest() #323
+---[0.014092ms] com.alibaba.fastjson.JSONObject:() #324
+---[0.107529ms] com.fun.base.bean.RequestInfo:() #325
+---[0.014428ms] com.fun.utils.Time:getTimeStamp() #327
+---[39.088784ms] org.apache.http.impl.client.CloseableHttpClient:execute() #328
+---[0.007822ms] com.fun.utils.Time:getTimeStamp() #329
+---[0.027006ms] com.fun.frame.httpclient.FanLibrary:getStatus() #332
+---[0.037918ms] com.fun.frame.httpclient.FanLibrary:afterResponse() #333
+---[0.548651ms] com.fun.frame.httpclient.FanLibrary:getContent() #334
+---[1.198112ms] com.fun.frame.httpclient.FanLibrary:getJsonResponse() #336
+---[0.030268ms] com.alibaba.fastjson.JSONObject:putAll() #336
+---[0.010035ms] com.fun.frame.httpclient.FanLibrary:getMark() #340
+---[1.491255ms] com.fun.db.mysql.MySqlTest:saveApiTestDate() #340
+---[0.01706ms] org.apache.http.client.methods.CloseableHttpResponse:close() #342
`---[0.655007ms] com.fun.base.bean.RequestInfo:isBlack() #348
arthas命令trace追踪方法链路
代码
package com.fun
import com.alibaba.fastjson.JSONObject
import com.fun.frame.httpclient.FanLibrary
import org.apache.http.client.methods.HttpGet
class sd extends FanLibrary {
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)
}
testOver()
}
static String test() {
sleep(1000)
for (int i = 0; i < 5; i++) {
getRandomInt(100)
}
ArrayList list = Arrays.asList(32, 432, 432, 423, 423, 32)
list.stream().forEach({x -> output(x)})
DEFAULT_STRING
}
}
其中gethttpresponse()方法代码:
/**
* 获取响应实体
*
会自动设置cookie,但是需要各个项目再自行实现cookie管理
*
该方法只会处理文本信息,对于文件处理可以调用两个过期的方法解决
*
* @param request 请求对象
* @return 返回json类型的对象
*/
public static JSONObject getHttpResponse(HttpRequestBase request) {
if (!isRightRequest(request)) RequestException.fail(request);
beforeRequest(request);
JSONObject res = new JSONObject();
RequestInfo requestInfo = new RequestInfo(request);
if (HEADER_KEY) output("===========request header===========", Arrays.asList(request.getAllHeaders()));
long start = Time.getTimeStamp();
try (CloseableHttpResponse response = ClientManage.httpsClient.execute(request)) {
long end = Time.getTimeStamp();
long elapsed_time = end - start;
if (HEADER_KEY) output("===========response header===========", Arrays.asList(response.getAllHeaders()));
int status = getStatus(response, res);
JSONObject setCookies = afterResponse(response);
String content = getContent(response);
int data_size = content.length();
res.putAll(getJsonResponse(content, setCookies));
int code = iBase == null ? -2 : iBase.checkCode(res, requestInfo);
if (iBase != null && !iBase.isRight(res))
new AlertOver("响应状态码错误:" + status, "状态码错误:" + status, requestInfo.getUrl(), requestInfo).sendSystemMessage();
MySqlTest.saveApiTestDate(requestInfo, data_size, elapsed_time, status, getMark(), code, LOCAL_IP, COMPUTER_USER_NAME);
if (SAVE_KEY) FunRequest.save(request, res);
} catch (Exception e) {
logger.warn("获取请求相应失败!", e);
if (!requestInfo.isBlack())
new AlertOver("接口请求失败", requestInfo.toString(), requestInfo.getUrl(), requestInfo).sendSystemMessage();
} finally {
HEADER_KEY = false;
if (!requestInfo.isBlack()) {
lastRequest = request;
}
}
return res;
}郑重声明:“FunTester”首发,欢迎关注交流,禁止第三方转载。更多原创文章:Fhaohaizi@163.com。
热文精选
java 方法 链路 trace_arthas命令trace追踪方法链路相关推荐
- arthas使用示例:trace追踪方法调用路径及统计方法耗时
介绍 参数说明 举例 总结
- java的jps命令怎么使用_jps命令的使用方法
jps(Java Virtual Machine Process Status Tool) 是java提供的一个显示当前所有java进程pid的命令,适合在linux/unix平台上简单察看当前jav ...
- 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)
一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...
- Java学习第八天<什么是方法><方法的定义和调用><方法的重载><命令行传参><可变参数><递归详解>
什么是方法 System.out.println(); 调用系统类里的标准输出对象(out)中的方法println public class Demo01 {//main 方法public stati ...
- Java虚拟机中获得Runtime实例的方法是什么?
Runtime类用于表示Java虚拟机运行时的状态,它用于封装Java虚拟机进程.每次使用"java"命令启动Java虚拟机时都会对应一个Runtime实例,并且只有一个实例,应用 ...
- java如何用c 的方法_JAVA如何调用C/C++方法
JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能.解决JAVA对本地操作的一种方法就是JNI. JAVA通过JNI调用本地方法, ...
- 将Java程序变成可执行文件的一个简单方法
将Java程序变成可执行文件的一个简单方法 运行Java程序(SWING或SWT的桌面程序)可以直接执行.class文件或将所有的.class文件及相关的其他文件压缩成.jar文件,然后使用javaw ...
- Oracle数据库中调用Java类开发存储过程、函数的方法
Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日 浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...
- Java Web项目中解决中文乱码方法总结
一.了解常识: 1.UTF-8国际编码,GBK中文编码.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.web tomcat:默认是ISO8859-1,不 ...
最新文章
- 中级实训第一天的自学报告
- 阿里的“扫地僧”,2年“抄”了20万页古籍
- 安卓socks5代理客户端_内网Mysql代理浅析
- 能在xcode5中开发基于IOS7sdk的应用程序兼容ios4.3之后的系统吗?
- Android 开发笔记 ListView异步加载图片
- python 线程之threading(五)
- Leetcode1712. 将数组分成三个子数组的方案数[C++题解]:双指针和前缀和
- SQL Server 堆表行存储大小(Record Size)
- 四叶草社交平台——十天冲刺(4)
- Serverless 实战 —— 基于 Serverless 的 VuePress 极简静态网站
- java反射性能问题_Java反射应用实例java反射的性能问题 | 学步园
- SVN 安装与使用教程总结
- 45. 圆圈中最后剩下的数字
- Delphi运行期错误
- FREETYPE旋转功能初探
- 文本在线查重(Online Copy Detection)的实现
- 图形化——可视化在线绘图引擎
- TCP/UDP 协议格式
- 【学习记录——unity 3D】Stealth秘密行动游戏制作(一)
- android12.0(S) 通知栏不显示闹钟和静音图标 bug
热门文章
- 计算机专业兴趣小组 名字,信息技术兴趣小组
- java:为什么字符串比较时要用equals方法而不是==运算符
- 信息学奥赛一本通 1019:浮点数向零舍入 | OpenJudge NOI 1.2 06
- 信息学奥赛一本通(2034:【例5.1】反序输出)
- 信息学奥赛一本通(1062:最高的分数)
- 训练日志 2019.1.13
- Best Cow Line(POJ-3617)
- 44 SD配置-销售凭证设置-定义状态参数文件
- linux查看vnc进程命令_linux命令:VNC服务的配置及使用
- 文件md5码怎么生成_Linux 系统文件校验方法--MD5,SHA1,PGP,SHA256,SHA512