Btrace的实战应用

最近在处理一个准线上问题的时候一个前辈介绍了一个很好用的检测工具:Btrace(强大之处就不多说了,不了解的自行google)。实现原理可以参考http://www.ibm.com/developerworks/cn/java/j-lo-instrumentation/。
接下来就来介绍下怎么玩Btrace(Linux环境)

1) 首先下载:wget https://kenai.com/projects/btrace/downloads/download/releases/release-1.2.2/btrace-bin.zip,下载下来后直接解压

2) 修改{btace_home}/bin/btrace文件
#后面会需要编译一个BTrace.java的文件,所以这个路径不可少
JAVA_HOME=/XXX/XXX/java

#因为需要动态编译,所以需要设置原类库的classpath,主要是要编译BTRACE文件,它里面   肯定有依赖原类(这个是非必配项,只有当你BTrace类中需要引入工程中其他类时才需要设置)
CLASS_PATH=需要引入的类的classes的目录

#BTRACE_HOME路径,编译以及运行时都需要BTRACE自己的jar包
BTRACE_HOME=/home/work/btrace

3)新建一个Trace.java(名字自己取),这里写的例子是检测一个方法的返回值
(具体写法根据需要自行设置,网上也有用法):
import com.sun.btrace.AnyType;
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
@BTrace
public class Trace {
    @OnMethod(clazz = "类全名,包含包名", method = "需要检测的方法", location = @Location(Kind.RETURN))
     //  注意点: 如果你检测的类返回的是一个基本类型这边@Returen 后面需要用对应的类型来接受返回值
    public static void m0(@Return Object ret) {
        println("XXXXX===返回值为==");
        println(str(ret));//返回值
    }
}


4) 运行 {btrace_home}/bin/btrace   应用的pid   Trace.java

BTrace正式开始工作啦 :)


PS:试验发现内部类监控不到

猜你喜欢

转载自fengg694.iteye.com/blog/2029569