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,本地编译跟踪类。
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.*;@BTracepublic 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?
?
????? 使用非常方便,但背后的技术点还是很有技巧的。