`
iamzhongyong
  • 浏览: 797131 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java中记录方法调用时间,结果按照方法的层级树状的输出

    博客分类:
  • java
阅读更多

​    ​    ​在java中,最常用的埋点时间的方法就是在方法运行前搞个常量记录当前时间,然后再方法结束的时候,搞个常量记录当前时间,然后两个的时间差就是方法的消耗时间。

    ​    ​这种处理问题不大,但是有时候我们想达到这样的效果,就是把树状的结构也搞出来。这样有层次,排查性能问题会非常方便。

 

1
2
3
0 [0ms] - rootMethod
`---0 [0ms] - first
    `---0 [0ms] - second

    ​    ​于是借助webx框架(已经开源http://openwebx.org/)中的Profiler类,结合AOP,做了一个简单的例子,代码已经搞到自己的github上了,这样可以直接搞代码用了。

    ​    ​github地址:https://github.com/iamzhongyong/treeProfiler

 

类名的基本介绍:

1、Profiler类的作用,方法的开始时间和结束时间埋点;

2、Entry类的左右,作为开始时间和结束时间的实体类,同时有个List类型的subEntries,这样就能描述树状的结构了;

3、ThreadLocal类,线程级别的内存缓存,统计的entry放置在这里,但是在线程结束之后,要记得清理掉;

4、ProfilerAspect,AOP的增强类;

 

如何使用:

1、添加AOP的配置,把ProfilerAspect作为一个普通的bean注入到容器中即可;

2、然后在需要统计时间的地方,可以使方法上,也可以是类上面,添加注解@ProfileAnno;

3、之后就可以在日志中看树状的统计信息了,在ProfilerSwith中有相应的开关,外部系统可以自行实现;

 

 

 

3
0
分享到:
评论
6 楼 莫语snow 2014-04-12  
5 楼 莫语snow 2014-04-12  
最近做实验碰到了类似的情况,需要给出Call Graph.

下载了源码,运行ProfilerAopTest时,只能给第一个方法(A())埋时间点,方法A调用的A1和方法A1调用的A11都失效。后来发现这是Spring AOP,跟踪“嵌套调用方法”(nested method)时常出现的问题。
在stackoverflow上找到了解决方法,不使用this对象调用方法就好用了。
http://stackoverflow.com/questions/5780757/spring-aop-logging-and-nested-methods




4 楼 iamzhongyong 2013-12-23  
kongxuan 写道
当你俺在支付宝的时候,用过这玩意。。

呵呵,目前看好多profiler的东西,都是参照宝宝的这个类搞的。看我这个类,膜拜宝宝呵呵
3 楼 iamzhongyong 2013-12-23  
liubey 写道
必须要依赖webx?

不用依赖webx,profiler这个类是来自webx的,我把这个类单独搞出来了,然后在我的github上搞了一份,因为非原创,所以提一下webx
2 楼 kongxuan 2013-12-22  
当你俺在支付宝的时候,用过这玩意。。
1 楼 liubey 2013-12-22  
必须要依赖webx?

相关推荐

    57.java带参数方法调用.zip

    57.java带参数方法调用.zip57.java带参数方法调用.zip57.java带参数方法调用.zip57.java带参数方法调用.zip57.java带参数方法调用.zip57.java带参数方法调用.zip57.java带参数方法调用.zip57.java带参数方法调用.zip...

    Java方法反射调用demo

    Java反射 调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用基本类型数组参数的方法 调用String数组参数的方法 调用Object数组参数的方法 调用私有方法

    C++调用Java方法

    Android Studio项目,此Demo实现Java调用C++函数,然后C++函数回调Java方法、纯C++直接调用Java方法,此为github地址链接

    55.java方法调用.zip

    55.java方法调用.zip55.java方法调用.zip55.java方法调用.zip55.java方法调用.zip55.java方法调用.zip55.java方法调用.zip55.java方法调用.zip55.java方法调用.zip55.java方法调用.zip55.java方法调用.zip55.java...

    java方法调用

    java方法调用

    java远程方法调用

    java远程方法调用,可以实现远程调用,仅作参考

    java动态调用方法

    利用java反射原理实现方法的动态调用。

    JAVA类的方法调用和变量

    JAVA类的方法调用和变量 一、类的分类: 1、普通类 2、抽象类(含有抽象方法的类) 3、静态类(不需要实例化,就可以使用的类) 二、方法的分类: 1、私有方法(只有类的内部才可以访问的方法) 2、保护方法(只有...

    JAVA方法调用万年历

    ACCP5.0 JAVA方法调用万年历!采用方法调用的形式来做的万年历·····

    groovy和Java相互调用1

    Groovy 调用 Java 类groovy 调用 Java class 十分方便,只需要在类前导入该 Java 类,在 Groovy 代码中就可以无缝使用该

    java rmi远程方法调用 客户端

    rmi 远程方法调用 客户端

    C#调用java类、jar包方法

    C#调用java类、jar包方法C#调用java类、jar包方法C#调用java类、jar包方法C#调用java类、jar包方法C#调用java类、jar包方法。

    Java RMI远程方法调用详解-例子代码

    Java RMI远程方法调用详解-例子代码,例子详解在:http://blog.csdn.net/guyuealian/article/details/51992182

    C#调用JavaWebService

    调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...

    Springboot Thymeleaf模板文件调用Java类静态方法

    方法名(参数)}”这种格式来调用Java类的静态方法。 开发环境:IntelliJ IDEA 2019.2.2 Spring Boot版本:2.1.8 新建一个名称为demo的Spring Boot项目。 1、pom.xml 加入Thymeleaf依赖 <groupId>org.spring...

    基于JavaParser的代码调用链分析,可以用于分析Java代码的方法调用链.zip

    基于JavaParser的代码调用链分析,可以用于分析Java代码的方法调用链

    JAVA调用DLL方法 JAVA调用DLL方

    JAVA调用DLL JAVA调用DLLJAVA调用DLLJAVA调用DLLJAVA调用DLLJAVA调用DLL

    C语言调用java语言方法

    在C语言中调用java语言的方法!对初学者很不错的实例!Android jni开发之C语言调用java语言

    通过java类的路径实例化类并调用方法

    通过java类的路径实例化类并调用方法:仅仅知道类的路径,就可以实例化对象,利用反射机制调用其方法

    Java程序设计基础:调用方法-方法的嵌套调用.pptx

    在定义方法时,一个方法内不能再定义另一个方法,即不能嵌套定义,但是在调用一个方法的过程中,还可以调用另一个方法,这是方法的嵌套调用。 方法的嵌套调用 假设main方法中调用a方法,a 方法中调用b方法,具体流程...

Global site tag (gtag.js) - Google Analytics