首页 > 代码库 > btrace 实践笔记
btrace 实践笔记
btrace简介:
btrace 是一个使用在JAVA平台上面的,安全的,动态跟踪工具。它一般用于动态跟踪正在运行的jAVA程序。
使用说明在这里。下载地址在这里。
下载的时候注意版本问题,我最初下载的是release-1.2.3的版本,然后服务器上面的JAVA的版本是1.6.0_32。运行的时候报了这个错。
[java] java.lang.UnsupportedClassVersionError[/java]
这是由于编译release-1.2.3的jdk版本比1.6.0_32要高,但是却运行在较低版本的JVM上面,所以会报这个错,然后我下载了release-1.2.2版本没有这个问题。
btrace安装:
btrace其实不需要安装,直接解压,然后把bin这个目录加到path里面,并且设置BTRACE_HOME为解压目录,然后就可以执行btrace命令测试了。
btrace实践步骤
首先找到运行中java程序的PID(后面会用到).
?
ps -A|grep java
然后
创建脚本:例如TraceObject.java
?
import static com.sun.btrace.BTraceUtils.*;import com.sun.btrace.annotations.*; @BTrace public class TraceObject{ @TLS static long beginTime; @OnMethod(clazz="com.task.CheckTask",method="getItem")public static void traceBegin(){beginTime = timeMillis();} @OnMethod(clazz="com.task.CheckTask",method="getItem",location=@Location(Kind.RETURN))public static void trace(long itemId,@Return Object result){println("---------start-------------");println(strcat("itemId:",str(itemId)));println(strcat("result itemName:",str(get(field("com.info.ItemInfoDO","itemIdStr"),result))));println(strcat(str(sizeof(result)),"bytes"));println(strcat(strcat("execute time is:",str(timeMillis()-beginTime)),"ms"));println("method stack:");jstack();println("---------end-------------");}}
这个脚本主要的作用是监控CheckTask这个类的对象的getItem方法的入参是什么,返回值是什么,返回值占多少个字节(仅仅是该对象占的字节,不包括对象属性指向对象的大小)。以及这个方法的调用堆,以及这个方法的运行时间。
简单介绍下上面用到的几个注解:
@OnMethod 指定需要动态跟踪的类名和方法,其中的location属性表明是在方法执行前监控还是执行完之后监控,默认为执行方法前,如果需要执行完后监控使用location=@Location(Kind.RETURN)。
@TLS TLS用来指定Btrace的静态属性为线程本地属性。
另外trace方法的itemId为getItem方法的入参,result为getItem的返回值。
运行
sudo -u admin -H sh btrace 1671 TraceObject.java
就能看到结果了。
当然btrace还有其他的用法。可以参照user guide 中例子。
btrace 实践笔记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。