btrace使用及例子

一, Btrace的简介:

    Btrace是由Kenai 开发的一个开源项目,是一种动态跟踪分析JAVA源代码的工具。它可以用来帮我们做运行时的JAVA程序分析,监控等等操作,当然,它也不是万能的,BTrace也有一些使用上的限制,如:不能在脚本中新建类等等,这些在官方网站上有很详细的介绍,大家有兴趣可以查看:http://kenai.com/projects/btrace/pages/UserGuide。后面谈到下载Btrace时,下载包里也有。

 

二, Btrace 技术点:

    Attach API + BTrace脚本解析引擎 + ASM + JDK6 Instumentation

 

三, Btrace 原理:

        

btrace使用及例子_第1张图片

 

本地编写跟踪类,由Btrace 命令行执行即可。

1,本地编译跟踪类。

2,attach远程JVM PID,将class传过去。

3,通过脚本引擎及asm动态变更JVM中的字节码,将跟踪代码嵌入。

4,代码触发后,将结果返回本地输出。

 

四, 例子(跟踪代码与被跟踪代码在一台机器上):

        1)本地先在JVM进程中运行一个类,可以是启动JBOSS服务器的方式(实际应用时的场景)。

        2)下载Btrace 安装包,在本地安装或无需安装,解压即可。

地址:http://kenai.com/projects/btrace/downloads/directory/releases/release-1.2

下载一较新的稳定版本:btrace-bin.zip ,解压到本地。

        3)将  XXXX\btrace\bin 加入classPath。

        4)编写跟踪类,比如BtraceTest.java

package com.nio.sample;

import com.sun.btrace.*;
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
@BTrace
public class BtraceTest {
    @OnMethod(clazz = "com.component.JobManager",method="addToQueue",location=@Location(value=Kind.RETURN))
    public static void func(@Duration long duration){
        println(duration);
    }
}

        5)找到正在运行的被监控代码所在进程的PID,在Btrace/bin 目录下,运行:    btrace PID /home/admin/com/nio/sample/BtraceTest.java 

         在控制台即可看见结果,或者运行

btrace PID /home/admin/com/nio/sample/BtraceTest.java  > 1.log

          将输出结果输出到1.log 中。

                btrace com.nio.sample.BtraceTest.java 

 

      使用非常方便,但背后的技术点还是很有技巧的。

你可能感兴趣的:(BTrace)