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
分享到:
相关推荐
btrace(阿里封装过的,使用更简单)
总的来说,离线安装jVisualVM的BTrace插件是一项实用的技能,特别是在网络条件有限的环境中。正确安装和使用BTrace,可以极大地提升Java应用程序的性能调优效率。通过熟练掌握这一工具,开发者能够更深入地理解和...
Btrace 提供了一种灵活的脚本语言,用户可以编写简单的脚本来定义需要监控的行为,如方法调用统计、资源消耗分析等。 ### 二、Btrace 的主要功能 1. **类方法统计**:Btrace 可以帮助开发者追踪并统计应用程序中...
【标题】"jdk1.8-Btrace.rar"指的是一个针对Java开发的特殊工具包,它包含了一个名为Btrace的在线检测插件。这个插件专为Java开发者设计,旨在帮助他们在应用程序运行时进行问题的实时定位,而无需停止或重启服务。...
【标题】"btrace release-1.2.5.1" 指的是BTrace的一个特定版本,1.2.5.1。BTrace是一款强大的Java应用动态追踪工具,它允许开发者在运行时对Java应用程序进行性能分析和诊断,而无需修改源代码或重新部署应用。这个...
2. **脚本编写**:BTrace使用一种简单的脚本语言,基于Groovy,开发者可以编写脚本来定义想要追踪的行为。例如,可以追踪方法调用、记录日志、计算性能指标等。 3. **安全机制**:BTrace有内置的安全策略,以防止不...
**Btrace资源详解** Btrace 是一个强大的Java应用程序动态跟踪工具,它允许开发者在不修改代码的情况下,对正在运行的应用程序进行实时监控和诊断。这个资源包包含了Btrace的多个组件,下面我们将逐一介绍。 1. **...
《深入理解BTrace 1.3.9:Java应用诊断利器》 BTrace,全称为“Bytecode Tracing”,是一款强大的动态代码插桩工具,它允许开发者在运行时对Java应用程序进行性能分析和诊断。BTrace 1.3.9是其一个重要版本,特别...
BTrace是一款强大的Java诊断工具,专用于实时、安全地进行生产环境中的应用程序性能监控和故障排查。它的核心特性在于能够在不中断程序运行的情况下,动态插入代码进行跟踪和分析,这对于理解复杂的系统行为和定位...
开发者可以通过编写简单的BTrace脚本来定义感兴趣的监控点,这些脚本会在运行时被插入到目标应用程序的代码中,但不会改变原有代码的逻辑。脚本可以监控方法执行时间、记录日志、检查对象状态等,而且因为是动态插入...
例如,`BtraceTest.java`可能就是一个简单的BTrace脚本,用于监控某个特定的业务逻辑或性能指标。 在开始监控之前,确保远程服务器已经安装了JDK,并且JVM支持 `-javaagent` 参数。你需要将BTrace的jar包(如 `...
1.btrace扩展是在btrace已由功能上进行的扩展,原有功能和使用方式依然没变。目前版本扩展了两个功能:接口时间监控和接口时间调用树监控。扩展之后的btrace功能使用时都不需要写btrace脚本。 2.使用接口时间监控...
3. **简单易用**:BTrace提供了一种脚本语言,类似于Java,使得开发者可以快速编写调试和分析代码。 4. **灵活的插桩**:用户可以通过编写BTrace脚本,选择性的在特定方法或类上添加自定义的行为,如增加日志输出,...
Btrace:java性能调优及问题追踪工具 Btrace:java性能调优及问题追踪工具
标题中的 "btrace-release-1.3.11.3.zip" 表明这是一个 Btrace 的特定发布版本,版本号为 1.3.11.3,通常包含已编译的库文件、文档和其他必要的资源。 在 Java 开发中,性能监控是至关重要的,因为这有助于识别和...
标题 "bTrace跟踪线程堆栈" 涉及到的是在Java开发中对线程堆栈进行监控和分析的技术,主要使用了开源工具bTrace。bTrace是一款强大的、无侵入式的Java运行时代码注入工具,允许开发者在运行中的Java应用上动态添加...
2. **BTrace Scripts**:BTrace使用一种简单的脚本语言,让开发者能够编写诊断脚本。这些脚本定义了要在目标应用中执行的操作,如记录方法调用、计时器、内存使用情况等。BTrace脚本语言具有丰富的内置函数和变量,...
btrace-bin直接解压缩配置环境变量后即可运行使用。 java监控调试工具虚拟机监控程序,利用BTrace可以在线监控java程序状态。 BTrace是一种安全,动态的Java跟踪工具。BTrace通过动态(字节码)检测正在运行的Java...
BTrace 提供了一种声明式的脚本语言,用户可以编写简单的脚本来定义要收集的数据或者执行的操作。这些脚本被称为 BTrace 脚本,它们是基于 Java 的,但包含了一些特定的注解,如 `@OnMethod` 和 `@Traced`,用于指示...
**BTrace调试工具详解** BTrace是一款强大的Java应用程序动态跟踪工具,它允许开发者在不修改源代码或重新启动应用的情况下,对正在运行的Java应用程序进行实时的性能分析和诊断。这款工具的核心在于其字节码注入...