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中有相应的开关,外部系统可以自行实现;

 

 

 

猜你喜欢

转载自iamzhongyong.iteye.com/blog/1993341
今日推荐