Btrace使用说明

来源:互联网 发布:站长工具端口 编辑:程序博客网 时间:2024/05/01 05:48

引言:Btrace是一个非常奇特的工具,非侵入式的工具,可以监控程序中发生的运行状态,本文将介绍如何使用Btrace来完成监控工具。

1. Btrace

 BTrace 是一个可靠的,用来动态跟踪Java程序的工具。它通过动态对运行中的Java程序进行字节码生成来工作。BTrace会对运行中的Java程序的类插入一些跟踪操作 来对被跟踪的程序进行热替换。

  BTrace应用较为广泛的原因应该是其安全性和无侵入性,已经热交互技术,使得我们无需启动Agent的情况下动态跟踪分析,其安全性不会导致对目标Java进程的任何破坏性影响,使得BTrace成为我们线上产品问题定位的利器。无侵入性无需我们对原有代码做任何修改,降低上线风险和测试成本,并且无需重启启动目标Java进程进行Agent加载即可动态分析和跟踪目标程序,可以说BTrace可以满足大部分的应用场景。

 项目主页: https://kenai.com/projects/btrace

2. Btrace示例

 Btrace的监控代码如下:

import static com.sun.btrace.BTraceUtils.str;import static com.sun.btrace.BTraceUtils.strcat;import static com.sun.btrace.BTraceUtils.print;import static com.sun.btrace.BTraceUtils.println;import static com.sun.btrace.BTraceUtils.timeMillis;import com.sun.btrace.AnyType;import com.sun.btrace.BTraceUtils.Time;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;@BTracepublic class BTraceMethod {    @TLS    private static long startTime;        @OnMethod(clazz="/com.rain.wx.meal.*/", method="/.*/", location=@Location(Kind.ENTRY))    public static void startMethod() {    startTime = timeMillis();    }        @OnMethod(clazz="/com.rain.wx.meal.*/", method="/.*/", location=@Location(Kind.RETURN))    public static void endMethod(@ProbeClassName String clazz,@ProbeMethodName String method) {    print(strcat(strcat(clazz ,"."), method));    print("[");    print(strcat("Time takes ", str(timeMillis() - startTime)));    println("]");    }}
这里做个说明,Btrace里面的类库都是内置的,无法使用jdk中自带的类库和工具类,这个需要格外注意,遵守java的语法,但是只能使用Btrace自带的类库和工具类。

从这里的代码中,我们可以发现其中是基于模式来进行匹配的,匹配class和类中的方法,在这个方法体中,打印出各个方法输出的执行时间差。

我们进入JDK目录,然后点击jvisualvm,在plugins中安装btrace插件,在安装完成之后,启动调试工具:

 

 点击运行程序,然后监控运行信息输出:

 

3.  Btrace内容的详述

  关于Btrace的内容,在下面这篇文章已经有了很详细的介绍,这里就不在赘述了。

 Btrace基本资料的参考资料: http://blog.csdn.net/mgoann/article/details/7268508

 另外大家也可以参考官网的参考资料。

4. 参考资料

  • http://www.cnblogs.com/serendipity/archive/2012/05/14/2499840.html
  • http://linmingren2003.blog.163.com/blog/static/56751003201121871725139/
  • http://blog.csdn.net/mgoann/article/details/7268657
0 0
原创粉丝点击