读书人

java中记要方法调用时间结果按照方法

发布时间: 2014-04-22 16:12:07 作者: rapoo

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

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

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

?

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

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

?

?

?

1 楼 liubey 昨天 必须要依赖webx? 2 楼 kongxuan 昨天 当你俺在支付宝的时候,用过这玩意。。 3 楼 iamzhongyong 昨天 liubey 写道必须要依赖webx?
不用依赖webx,profiler这个类是来自webx的,我把这个类单独搞出来了,然后在我的github上搞了一份,因为非原创,所以提一下webx 4 楼 iamzhongyong 昨天 kongxuan 写道当你俺在支付宝的时候,用过这玩意。。
呵呵,目前看好多profiler的东西,都是参照宝宝的这个类搞的。看我这个类,膜拜宝宝呵呵

读书人网 >互联网

热点推荐