【性能跟踪】btrace学习二--btrace一个简单例子

btrace安装好了,就看一些语法吧。可以到btrace的官方帮助文档中去看,基本上就可以http://kenai.com/projects/btrace/pages/UserGuide

 

【注:你本地的jdk要是1.6及以上才行,1.5可是不支持的】

 

下面以一个例子来说明:

新建了一个工程,目录结构如下:

 

写btrace脚本和一般的java差别不大,只是用了一些annotation来标识某个类是跟踪脚本。btrace用到的jar包基本都在下载的/btrace-bin/build文件下,将这三个包导进工程就可以使用了。【btrace脚本写好后可以不用编译,直接执行.java文件就可以】

 

看一个trace helloworld的例子。

我的helloworld文件在com.app.test包下,源码为:

  1. package my.app.test;  
  2.   
  3. import java.util.Random;  
  4.   
  5. public class HelloWorld {  
  6.     public static void main(String[] args) throws Exception {  
  7.         //CaseObject object = new CaseObject();  
  8.         while (true) {  
  9.             Random random = new Random();  
  10.             execute(random.nextInt(4000));  
  11.               
  12.             //object.execute(random.nextInt(4000));  
  13.         }  
  14.           
  15.           
  16.           
  17.     }  
  18.     public static Integer execute(int sleepTime) {  
  19.         try {  
  20.             Thread.sleep(sleepTime);  
  21.         } catch (Exception e) {  
  22.         }  
  23.         System.out.println("sleep time is=>"+sleepTime);  
  24.         return 0;  
  25.     }  
  26. }  

 

这时候我要监控execute方法执行的时间,

 

 btrace脚本如下:

  1. import static com.sun.btrace.BTraceUtils.println;  
  2. import static com.sun.btrace.BTraceUtils.str;  
  3. import static com.sun.btrace.BTraceUtils.strcat;  
  4. import static com.sun.btrace.BTraceUtils.timeMillis;  
  5.   
  6. import com.sun.btrace.annotations.BTrace;  
  7. import com.sun.btrace.annotations.Kind;  
  8. import com.sun.btrace.annotations.Location;  
  9. import com.sun.btrace.annotations.OnMethod;  
  10. import com.sun.btrace.annotations.ProbeClassName;  
  11. import com.sun.btrace.annotations.ProbeMethodName;  
  12. import com.sun.btrace.annotations.TLS;  
  13. @BTrace  
  14. public class TraceHelloWorld {  
  15.       
  16.     @TLS  
  17.     private static long startTime = 0;  
  18.       
  19.     @OnMethod(clazz = "my.app.test.HelloWorld", method = "execute")  
  20.     public static void startMethod(){  
  21.         startTime = timeMillis();  
  22.     }  
  23.       
  24.     @OnMethod(clazz = "my.app.test.HelloWorld", method = "execute", location = @Location(Kind.RETURN))  
  25.     public static void endMethod(){  
  26.         println(strcat("the class method execute time=>", str(timeMillis()-startTime)));  
  27.         println("-------------------------------------------");  
  28.     }  
  29.       
  30.     @OnMethod(clazz = "my.app.test.HelloWorld", method = "execute", location = @Location(Kind.RETURN))  
  31.     public static void traceExecute(@ProbeClassName String name,@ProbeMethodName String method,int sleepTime){  
  32.         println(strcat("the class name=>", name));  
  33.         println(strcat("the class method=>", method));  
  34.         println(strcat("the class method params=>", str(sleepTime)));  
  35.           
  36.     }  
  37. }  

上面源码有几点注意的:

1、import里面引入了BTraceUtils很多的静态方法,也可以直接全部倒入

2、 @BTrace 这个annotation表明这个类是btrace脚本,

3、@OnMethod(clazz = "my.app.test.HelloWorld", method = "execute")

中clazz标明要监控那个类,也可以用正则匹配的方式,method标明要监控类的哪个方法

4、其中用到的几个方法timeMillis(),获取时间,println(str)输出

 

ok,上面代码写好了,将helloworld程序跑起来,看到每个几秒控制台就会有信息输出:

  1. sleep time is=>558  
  2. sleep: 2243  
  3. -----  
  4. sleep time is=>3408  
  5. sleep: 2205  
  6. -----  
  7. sleep time is=>2981  
  8. sleep: 1788  
  9. -----  
  10. sleep time is=>2052  
  11. sleep: 3527  
  12. -----  
  13. sleep time is=>2407  
  14. sleep: 3157  
  15. -----  

说明程序已经在跑了。

 

这时候就可以用traceHelloworld.java 这个脚本来监控了

 

进入命令行:

进入到traceHelloworld.java  所在的目录,现在我的脚本是在D:/workspace/btrace/src 下

 

用jps 看看我的helloworld程序的pid是什么,如下:

我的helloworld程序的pid是6140,

 

这时候运行一个命令btrace 6140 TraceHelloWorld.java 就可以了,结果如下:

 

可以看到每当helloworld里德execute方法执行时,就会打印出一行信息。打印出了类名,方法名,参数,以及这个方法执行的时间

 

 

ok了,这就是一个最简单的btrace监控了,还有一些复杂的用法,后面再写。也可以到官方网站上看看。很简单的,但是很有用

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值