【性能跟踪】btrace学习二--btrace一个简单例子
2010-12-21 21:58
351 查看
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包下,源码为:
这时候我要监控execute方法执行的时间,
btrace脚本如下:
上面源码有几点注意的:
1、import里面引入了BTraceUtils很多的静态方法,也可以直接全部倒入
2、 @BTrace 这个annotation表明这个类是btrace脚本,
3、@OnMethod(clazz = "my.app.test.HelloWorld", method = "execute")
中clazz标明要监控那个类,也可以用正则匹配的方式,method标明要监控类的哪个方法
4、其中用到的几个方法timeMillis(),获取时间,println(str)输出
ok,上面代码写好了,将helloworld程序跑起来,看到每个几秒控制台就会有信息输出:
说明程序已经在跑了。
这时候就可以用traceHelloworld.java 这个脚本来监控了
进入命令行:
进入到traceHelloworld.java 所在的目录,现在我的脚本是在D:/workspace/btrace/src 下
用jps 看看我的helloworld程序的pid是什么,如下:
我的helloworld程序的pid是6140,
这时候运行一个命令btrace 6140 TraceHelloWorld.java 就可以了,结果如下:
可以看到每当helloworld里德execute方法执行时,就会打印出一行信息。打印出了类名,方法名,参数,以及这个方法执行的时间
ok了,这就是一个最简单的btrace监控了,还有一些复杂的用法,后面再写。也可以到官方网站上看看。很简单的,但是很有用
【注:你本地的jdk要是1.6及以上才行,1.5可是不支持的】
下面以一个例子来说明:
新建了一个工程,目录结构如下:
写btrace脚本和一般的java差别不大,只是用了一些annotation来标识某个类是跟踪脚本。btrace用到的jar包基本都在下载的/btrace-bin/build文件下,将这三个包导进工程就可以使用了。【btrace脚本写好后可以不用编译,直接执行.java文件就可以】
看一个trace helloworld的例子。
我的helloworld文件在com.app.test包下,源码为:
package my.app.test; import java.util.Random; public class HelloWorld { public static void main(String[] args) throws Exception { //CaseObject object = new CaseObject(); while (true) { Random random = new Random(); execute(random.nextInt(4000)); //object.execute(random.nextInt(4000)); } } public static Integer execute(int sleepTime) { try { Thread.sleep(sleepTime); } catch (Exception e) { } System.out.println("sleep time is=>"+sleepTime); return 0; } }
这时候我要监控execute方法执行的时间,
btrace脚本如下:
import static com.sun.btrace.BTraceUtils.println; import static com.sun.btrace.BTraceUtils.str; import static com.sun.btrace.BTraceUtils.strcat; import static com.sun.btrace.BTraceUtils.timeMillis; import com.sun.btrace.annotations.BTrace; import com.sun.btrace.annotations.Kind; import com.sun.btrace.annotations.Location; import com.sun.btrace.annotations.OnMethod; import com.sun.btrace.annotations.ProbeClassName; import com.sun.btrace.annotations.ProbeMethodName; import com.sun.btrace.annotations.TLS; @BTrace public class TraceHelloWorld { @TLS private static long startTime = 0; @OnMethod(clazz = "my.app.test.HelloWorld", method = "execute") public static void startMethod(){ startTime = timeMillis(); } @OnMethod(clazz = "my.app.test.HelloWorld", method = "execute", location = @Location(Kind.RETURN)) public static void endMethod(){ println(strcat("the class method execute time=>", str(timeMillis()-startTime))); println("-------------------------------------------"); } @OnMethod(clazz = "my.app.test.HelloWorld", method = "execute", location = @Location(Kind.RETURN)) public static void traceExecute(@ProbeClassName String name,@ProbeMethodName String method,int sleepTime){ println(strcat("the class name=>", name)); println(strcat("the class method=>", method)); println(strcat("the class method params=>", str(sleepTime))); } }
上面源码有几点注意的:
1、import里面引入了BTraceUtils很多的静态方法,也可以直接全部倒入
2、 @BTrace 这个annotation表明这个类是btrace脚本,
3、@OnMethod(clazz = "my.app.test.HelloWorld", method = "execute")
中clazz标明要监控那个类,也可以用正则匹配的方式,method标明要监控类的哪个方法
4、其中用到的几个方法timeMillis(),获取时间,println(str)输出
ok,上面代码写好了,将helloworld程序跑起来,看到每个几秒控制台就会有信息输出:
sleep time is=>558 sleep: 2243 ----- sleep time is=>3408 sleep: 2205 ----- sleep time is=>2981 sleep: 1788 ----- sleep time is=>2052 sleep: 3527 ----- sleep time is=>2407 sleep: 3157 -----
说明程序已经在跑了。
这时候就可以用traceHelloworld.java 这个脚本来监控了
进入命令行:
进入到traceHelloworld.java 所在的目录,现在我的脚本是在D:/workspace/btrace/src 下
用jps 看看我的helloworld程序的pid是什么,如下:
我的helloworld程序的pid是6140,
这时候运行一个命令btrace 6140 TraceHelloWorld.java 就可以了,结果如下:
可以看到每当helloworld里德execute方法执行时,就会打印出一行信息。打印出了类名,方法名,参数,以及这个方法执行的时间
ok了,这就是一个最简单的btrace监控了,还有一些复杂的用法,后面再写。也可以到官方网站上看看。很简单的,但是很有用
相关文章推荐
- 【性能跟踪】btrace学习二--btrace一个简单例子
- 从零开始学习OpenCL开发(二)一个最简单的示例与简单性能分析
- 【性能跟踪】btrace学习一--安装btrace
- JBPM学习(一):实现一个简单的工作流例子全过程
- 一个简单的例子学习c#泛型
- Qt学习 之 Socket通信(一个简单的例子)
- 第8章 使用Spring Web Flow--学习一个简单例子
- 一个自写的共享内存简单的例子,学习原理之用
- 菜鸟学习Hibernate——简单的一个例子
- JBPM学习(一):实现一个简单的工作流例子全过程
- c#学习笔记之九 事件(event)的使用,一个简单的例子揭示其设计理念
- NSIS的学习笔记2---一个简单的例子,主要说明NSIS的结构
- ajax学习:一个简单的例子
- 一个简单的例子学习c#泛型
- 菜鸟学习Hibernate——简单的一个例子
- ServerSocket的一个简单例子,学习backlog参数的设置,即可以接受客户端的数量
- 通过编码方式使用性能计数器来进行性能计数的一个简单例子 - ZT
- glib学习1-一个简单的例子与g_log
- ios学习笔记block回调的应用(一个简单的例子)
- ant + junit 基础学习,一个简单易懂的例子