• 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 中例子。
     
    资料:http://rdc.taobao.com/team/jm/archives/509 btrace使用简介
           https://kenai.com/projects/btrace/pages/UserGuide  userguide
  • 相关阅读:
    SQL中Group By的使用
    SQL Server中的Merge关键字
    C# 9.0 正式发布了(C# 9.0 on the record)
    sql server 本地复制订阅 实现数据库服务器 读写分离
    SQL Server游标
    走进异步编程的世界 开始接触 async/await
    C#发展历程以及C#6.0新特性
    .NET NPOI导出Excel详解
    Centos 7搭建Gitlab服务器超详细
    使用python设置word中的字体样式
  • 原文地址:https://www.cnblogs.com/niurougan/p/4196031.html
Copyright © 2020-2023  润新知