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 中例子。
 
资料:http://rdc.taobao.com/team/jm/archives/509 btrace使用简介
       https://kenai.com/projects/btrace/pages/UserGuide  userguide

btrace 实践笔记的更多相关文章

  1. hadoop2.5.2学习及实践笔记(二)—— 编译源代码及导入源码至eclipse

    生产环境中hadoop一般会选择64位版本,官方下载的hadoop安装包中的native库是32位的,因此运行64位版本时,需要自己编译64位的native库,并替换掉自带native库. 源码包下的 ...

  2. Python编程从入门到实践笔记——异常和存储数据

    Python编程从入门到实践笔记——异常和存储数据 #coding=gbk #Python编程从入门到实践笔记——异常和存储数据 #10.3异常 #Python使用被称为异常的特殊对象来管理程序执行期 ...

  3. Python编程从入门到实践笔记——文件

    Python编程从入门到实践笔记——文件 #coding=gbk #Python编程从入门到实践笔记——文件 #10.1从文件中读取数据 #1.读取整个文件 file_name = 'pi_digit ...

  4. Python编程从入门到实践笔记——类

    Python编程从入门到实践笔记——类 #coding=gbk #Python编程从入门到实践笔记——类 #9.1创建和使用类 #1.创建Dog类 class Dog():#类名首字母大写 " ...

  5. Python编程从入门到实践笔记——函数

    Python编程从入门到实践笔记——函数 #coding=gbk #Python编程从入门到实践笔记——函数 #8.1定义函数 def 函数名(形参): # [缩进]注释+函数体 #1.向函数传递信息 ...

  6. Python编程从入门到实践笔记——用户输入和while循环

    Python编程从入门到实践笔记——用户输入和while循环 #coding=utf-8 #函数input()让程序暂停运行,等待用户输入一些文本.得到用户的输入以后将其存储在一个变量中,方便后续使用 ...

  7. Python编程从入门到实践笔记——字典

    Python编程从入门到实践笔记——字典 #coding=utf-8 #字典--放在{}中的键值对:跟json很像 #键和值之间用:分隔:键值对之间用,分隔 alien_0 = {'color':'g ...

  8. Python编程从入门到实践笔记——if语句

    Python编程从入门到实践笔记——if语句 #coding=utf-8 cars=['bwm','audi','toyota','subaru','maserati'] bicycles = [&q ...

  9. Python编程从入门到实践笔记——操作列表

    Python编程从入门到实践笔记——操作列表 #coding=utf-8 magicians = ['alice','david','carolina'] #遍历整个列表 for magician i ...

随机推荐

  1. Bitmap 多语言实现及应用

    http://blog.studygolang.com/2014/09/bitmap_multi_language/

  2. CoreDate的使用

    勾选 xcode的 CoreDate会帮我们自动创建 CoreData 但是我们通常不那样使用,通常把 CoreDate 在单利类中创建, // // ZYDAO.h // StoryboardTes ...

  3. java.lang.IllegalStateException

    java.lang.IllegalStateExceptionorg.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFac ...

  4. MSSQL系统表常用操作

    1:获取当前数据库中的所有用户表 select Name from sysobjects where xtype='u' and status>=0 2:获取某一个表的所有字段 select n ...

  5. sql 自定义函数-16进制转10进制

    做过笔记,好记性不如烂笔头: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[HEXTOINT]') and ...

  6. ListView使用自定义适配器的情况下实现适配器的控件点击事件执行Activity界面中的方法

    如果ListView使用的是自定义的适配器,比如MyArrayAdapter extends ArrayAdapter<String> 那么,如何实现适配器中的点击事件执行activity ...

  7. asp.net的CascadingDropDown取值和赋值

    获取选择的值 可以使用形如以下的方式获得选择的值: Label1.Text = ddlProvince.SelectedValue;        Label2.Text=ddlCity.Select ...

  8. 20个2014年最优秀的PHP框架

    http://www.php100.com/html/it/mobile/2014/0813/7198.htmlhttp://medoo.in/api/select 

  9. Java Concurrency - invokeAny & invokeAll

    Running multiple tasks and processing the first result A common problem in concurrent programming is ...

  10. CSS之图片关闭

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...