`
lynnkong
  • 浏览: 302513 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

BTrace简单实用教程

    博客分类:
  • java
阅读更多

BTrace本身也是可以独立运行的程序,作用是在不停止目标程序运行的前提下,通过HotSpot虚拟机的HotSwap技术动态插入原本不存在的调试代码。

比如遇到了我们的程序出问题,而又没有足够的打印语句时,我们一般的方法是不得不停掉服务,然后修改代码,增加打印语句,重新编译重新运行来解决,效率很低。

但有了BTrace,我们需要做的就很简单了,举例说明:

 

比如环境上运行着一个简单程序:

package com.huawei.main;

import java.io.BufferedReader;

import java.io.InputStreamReader;

 

public class Main

{

    public static void main(String[] args) throws Exception

    {  

        Main test = new Main();

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        for (int i = 0; i < 10; i++)

        {

            reader.readLine();

            int a = (int) Math.round(Math.random() * 1000);

            int b = (int) Math.round(Math.random() * 1000);

            System.out.println(test.add(a, b));

        }

    }

    public int add(int a, int b)

    {

        return a + b;

    }

}

  

 

该程序从控制台中获取一个输入,然后生成两个随机数,相加后将结果打印出来

对于add方法没有日志打印,如果想在不改变程序的前提下知道程序运行时add函数的入参和返回值,我们可以:

 

1. 在环境上解压BTrace工具包

比如解压到:/opt/eucalyptus/test/目录下

 

2. 编写BTrace脚本,对于脚本还是需要时间学习和实践的。如下TraceScript.java(注意在Linux下,这个文件应该是ANSI格式,否则会报illegal character: \65279的异常):

import com.sun.btrace.annotations.*;

import static com.sun.btrace.BTraceUtils.*;

 

@BTrace

public class TraceScript

{

       @OnMethod(clazz="com.huawei.main.Main", method="add", location=@Location(Kind.RETURN))

       public static void func(int a, int b, @Return int result)

       {

              jstack();

              println(strcat("para A: ", str(a)));

              println(strcat("para B: ", str(b)));

              println(strcat("result: ", str(result)));

       }

}

  

 

将该脚本放在环境目录下,比如:/opt/eucalyptus/test/TraceScript.java

test目录结构如下:

 

TraceScript.java外都是BTrace解压后的文件。

 

3. 利用jps得到Main程序的进程号(比如28772),到BTrace目录的bin目录下执行语句:

CLC_ESC02:/opt/eucalyptus/test/bin # ./btrace 28772 ../TraceScript.java

 

4. Main程序的控制台下输入字符,回车,会看到BTrace的输出:


 

 

 

总结:BTrace用法还有很多,打印调用堆栈、参数、返回值只是最基本的应用,在BTrace网址上有使用BTrace进行性能监视、定位连接泄露、内存泄露、解决多线程竞争问题等例子。

 

注意:如果一个java程序是以普通用户权限运行,则不能在root权限下对其进行btrace,一定先要切换到普通用户。

  • 大小: 4.4 KB
  • 大小: 2.1 KB
  • 大小: 5.8 KB
0
0
分享到:
评论
3 楼 lynnkong 2012-12-05  
java门徒CZP 写道
huawei可以上外网?

呵呵,为什么不可以上
2 楼 mmhotsky 2012-12-04  
昨天刚学了个strace,今天又看到了个btrace
1 楼 java门徒CZP 2012-12-04  
huawei可以上外网?

相关推荐

    btrace_ali

    btrace(阿里封装过的,使用更简单)

    jvisualvm btrace插件离线安装

    总的来说,离线安装jVisualVM的BTrace插件是一项实用的技能,特别是在网络条件有限的环境中。正确安装和使用BTrace,可以极大地提升Java应用程序的性能调优效率。通过熟练掌握这一工具,开发者能够更深入地理解和...

    Btrace 官方zip包

    Btrace 提供了一种灵活的脚本语言,用户可以编写简单的脚本来定义需要监控的行为,如方法调用统计、资源消耗分析等。 ### 二、Btrace 的主要功能 1. **类方法统计**:Btrace 可以帮助开发者追踪并统计应用程序中...

    jdk1.8-Btrace.rar

    【标题】"jdk1.8-Btrace.rar"指的是一个针对Java开发的特殊工具包,它包含了一个名为Btrace的在线检测插件。这个插件专为Java开发者设计,旨在帮助他们在应用程序运行时进行问题的实时定位,而无需停止或重启服务。...

    btrace release-1.2.5.1

    【标题】"btrace release-1.2.5.1" 指的是BTrace的一个特定版本,1.2.5.1。BTrace是一款强大的Java应用动态追踪工具,它允许开发者在运行时对Java应用程序进行性能分析和诊断,而无需修改源代码或重新部署应用。这个...

    btrace1.3.9

    2. **脚本编写**:BTrace使用一种简单的脚本语言,基于Groovy,开发者可以编写脚本来定义想要追踪的行为。例如,可以追踪方法调用、记录日志、计算性能指标等。 3. **安全机制**:BTrace有内置的安全策略,以防止不...

    Btrace资源

    **Btrace资源详解** Btrace 是一个强大的Java应用程序动态跟踪工具,它允许开发者在不修改代码的情况下,对正在运行的应用程序进行实时监控和诊断。这个资源包包含了Btrace的多个组件,下面我们将逐一介绍。 1. **...

    btrace1.3.9.zip

    《深入理解BTrace 1.3.9:Java应用诊断利器》 BTrace,全称为“Bytecode Tracing”,是一款强大的动态代码插桩工具,它允许开发者在运行时对Java应用程序进行性能分析和诊断。BTrace 1.3.9是其一个重要版本,特别...

    btrace安装包

    BTrace是一款强大的Java诊断工具,专用于实时、安全地进行生产环境中的应用程序性能监控和故障排查。它的核心特性在于能够在不中断程序运行的情况下,动态插入代码进行跟踪和分析,这对于理解复杂的系统行为和定位...

    btrace workbench

    开发者可以通过编写简单的BTrace脚本来定义感兴趣的监控点,这些脚本会在运行时被插入到目标应用程序的代码中,但不会改变原有代码的逻辑。脚本可以监控方法执行时间、记录日志、检查对象状态等,而且因为是动态插入...

    BTrace监控远程服务器使用实例

    例如,`BtraceTest.java`可能就是一个简单的BTrace脚本,用于监控某个特定的业务逻辑或性能指标。 在开始监控之前,确保远程服务器已经安装了JDK,并且JVM支持 `-javaagent` 参数。你需要将BTrace的jar包(如 `...

    btrace扩展功能工具

    1.btrace扩展是在btrace已由功能上进行的扩展,原有功能和使用方式依然没变。目前版本扩展了两个功能:接口时间监控和接口时间调用树监控。扩展之后的btrace功能使用时都不需要写btrace脚本。 2.使用接口时间监控...

    btrace-bin.zip

    3. **简单易用**:BTrace提供了一种脚本语言,类似于Java,使得开发者可以快速编写调试和分析代码。 4. **灵活的插桩**:用户可以通过编写BTrace脚本,选择性的在特定方法或类上添加自定义的行为,如增加日志输出,...

    btrace工具

    Btrace:java性能调优及问题追踪工具 Btrace:java性能调优及问题追踪工具

    btrace-release-1.3.11.3.zip

    标题中的 "btrace-release-1.3.11.3.zip" 表明这是一个 Btrace 的特定发布版本,版本号为 1.3.11.3,通常包含已编译的库文件、文档和其他必要的资源。 在 Java 开发中,性能监控是至关重要的,因为这有助于识别和...

    bTrace跟踪线程堆栈

    标题 "bTrace跟踪线程堆栈" 涉及到的是在Java开发中对线程堆栈进行监控和分析的技术,主要使用了开源工具bTrace。bTrace是一款强大的、无侵入式的Java运行时代码注入工具,允许开发者在运行中的Java应用上动态添加...

    btrace源代码

    2. **BTrace Scripts**:BTrace使用一种简单的脚本语言,让开发者能够编写诊断脚本。这些脚本定义了要在目标应用中执行的操作,如记录方法调用、计时器、内存使用情况等。BTrace脚本语言具有丰富的内置函数和变量,...

    btrace支持jdk1.6上运行的版本

    BTrace 提供了一种声明式的脚本语言,用户可以编写简单的脚本来定义要收集的数据或者执行的操作。这些脚本被称为 BTrace 脚本,它们是基于 Java 的,但包含了一些特定的注解,如 `@OnMethod` 和 `@Traced`,用于指示...

    btrace调试工具

    **BTrace调试工具详解** BTrace是一款强大的Java应用程序动态跟踪工具,它允许开发者在不修改源代码或重新启动应用的情况下,对正在运行的Java应用程序进行实时的性能分析和诊断。这款工具的核心在于其字节码注入...

    BTrace自我总结测试代码

    **BTrace 自我总结测试代码** BTrace 是一个强大的、安全的、动态的Java应用程序诊断工具,由Sun Microsystems(现已被Oracle收购)开发。它允许开发者在运行时对应用程序进行探查,而无需修改源代码或重启服务。...

Global site tag (gtag.js) - Google Analytics