博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线上追踪类方法执行耗时
阅读量:6119 次
发布时间:2019-06-21

本文共 8625 字,大约阅读时间需要 28 分钟。

  hot3.png

    线上环境大多为 Linux , 有时候代码执行缓慢,但你却无法定位到底是慢在了什么地方,或者说是比较困难来定位,本文介绍一种方式,方便你的问题定位。   

    首先,我们来说说一款工具:Arthas ,它主要是通过一款阿里开源的工具,详情请点击  查看。官方网站为 : https://alibaba.github.io/arthas/trace.html

 

    主要是通过这个工具提供的 trace 命令来追踪。

    具体的下载安装及使用方式,参考上面链接中提到的。

    下载安装完成后,直接输入如下命令:

Connecting to arthas server... current timestamp is 1541128186Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.                            /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'                          |  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.                          |  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |                         `--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'                                                                                                          wiki: https://alibaba.github.io/arthasversion: 3.0.4pid: 51807timestamp: 1541128186384$ $ traceThe argument 'class-pattern' is required$ trace -h USAGE:                                                                                                                                                                                          trace [-h] [-j] [-n 
] [-p
] [-E] class-pattern method-pattern [condition-express] SUMMARY: Trace the execution time of specified method invocation. The express may be one of the following expression (evaluated dynamically): target : the object clazz : the object's class method : the constructor or method params[0..n] : the parameters of method returnObj : the returned object of method throwExp : the throw exception of method isReturn : the method ended by return isThrow : the method ended by throwing exception #cost : the execution time in ms of method invocation EXAMPLES: trace -E org\\.apache\\.commons\\.lang\\.StringUtils isBlank trace org.apache.commons.lang.StringUtils isBlank trace *StringUtils isBlank trace *StringUtils isBlank params[0].length==1 trace *StringUtils isBlank '#cost>100' WIKI: https://alibaba.github.io/arthas/trace OPTIONS: -h, --help this help -j, --jdkMethodSkip skip jdk method trace -n, --limits
Threshold of execution times -p, --path
path tracing pattern -E, --regex Enable regular expression to match (wildcard matching by default)
Class name pattern, use either '.' or '/' as separator
Method name pattern
Conditional expression in ognl style, for example: TRUE : 1==1 TRUE : true FALSE : false TRUE : 'params.length>=0' FALSE : 1==2 $

    以上为该命令的帮助信息,具体如何使用。我在这里做一个简单的 Demo 来演示一下。

    比如我要追踪我的某一个类及类中每个调用的耗时,在命令中输入(为了演示隐藏了部分包名):

$ trace com.TestAction testMethodName params.length=1

Press Ctrl+C to abort.Affect(class-cnt:2 , method-cnt:2) cost in 303 ms.$ trace com.TestAction testMethodNamePress Ctrl+C to abort.Affect(class-cnt:2 , method-cnt:2) cost in 391 ms.`---ts=2018-11-02 11:14:19;thread_name=http-nio-8383-exec-138;id=b5;is_daemon=true;priority=5;TCCL=org.apache.catalina.loader.WebappClassLoader@4c12c6ec    `---[10.091747ms] com.TestAction$$EnhancerBySpringCGLIB$$4d4515a6:scanQr()        `---[9.739745ms] org.springframework.cglib.proxy.MethodInterceptor:intercept()            `---[6.161854ms] com.TestAction:testMethodName()                +---[0.082935ms] com.ActionResultMap:
()                +---[0.026972ms] javax.servlet.http.HttpServletRequest:getHeader()                +---[min=0.001465ms,max=0.003437ms,total=0.011679ms,count=6] java.lang.StringBuilder:
()                +---[min=0.001385ms,max=0.003889ms,total=0.02629ms,count=14] java.lang.StringBuilder:append()...............

    以上为输出结果信息。主要最后一行打印的信息:

min=0.001385ms,max=0.003889ms,total=0.02629ms,count=14

   简单说明一下:

    StringBuilder.append()  这个方式,调用:

            最小耗时为: 0.001385ms;

            最大耗时为: 0.003889ms;

            调用 14 后,共耗时:0.02629ms

 

好强大的工具~~~~感谢阿里技术人员开源。

转载于:https://my.oschina.net/Rayn/blog/2413642

你可能感兴趣的文章
bulk
查看>>
js document.activeElement 获得焦点的元素
查看>>
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>
day6-if,while,for的快速掌握
查看>>
JavaWeb学习笔记(十四)--JSP语法
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
[Usaco2015 dec]Max Flow
查看>>
javascript性能优化
查看>>
多路归并排序之败者树
查看>>
java连接MySql数据库
查看>>
转:Vue keep-alive实践总结
查看>>
android studio修改新项目package名称
查看>>
深入python的set和dict
查看>>