Btrace是一个jvm probe工具,可以灵活地声明刺探点并注入刺探逻辑。它自带的samples中有非常多的例子,本文列举了从这些例子中总结出来的刺探点声明。
构造函数刺探,重载的构造函数也可以
@BTrace public class OnThrow {
// store current exception in a thread local
// variable (@TLS annotation). Note that we can't
// store it in a global variable!
@TLS static Throwable currentException;
// introduce probe into every constructor of java.lang.Throwable
// class and store "this" in the thread local variable.
@OnMethod(
clazz="java.lang.Throwable",
method="<init>"
)
public static void onthrow(@Self Throwable self) {
currentException = self;
}
@OnMethod(
clazz="java.lang.Throwable",
method="<init>"
)
public static void onthrow(@Self Throwable self, String s) {
currentException = self;
}
@OnMethod(
clazz="java.lang.Throwable",
method="<init>"
)
public static void onthrow(@Self Throwable self, String s, Throwable cause) {
currentException = self;
}
@OnMethod(
clazz="java.lang.Throwable",
method="<init>"
)
public static void onthrow(@Self Throwable self, Throwable cause) {
currentException = self;
}
// when any constructor of java.lang.Throwable returns
// print the currentException's stack trace.
@OnMethod(
clazz="java.lang.Throwable",
method="<init>",
location=@Location(Kind.RETURN)
)
public static void onthrowreturn() {
if (currentException != null) {
Threads.jstack(currentException);
println("=====================");
currentException = null;
}
}
}
刺探一个类的所有子类
@BTrace public class Classload {
@OnMethod(
clazz="+java.lang.ClassLoader",
method="defineClass",
location=@Location(Kind.RETURN)
)
public static void defineclass(@Return Class cl) {
println(Strings.strcat("loaded ", Reflective.name(cl)));
Threads.jstack();
println("==========================");
}
}
另一个例子,
@BTrace
public class SubtypeTracer {
@OnMethod(
clazz="+java.lang.Runnable",
method="run"
)
public static void onRun(@ProbeClassName String pcn, @ProbeMethodName String pmn) {
// on every Runnable.run() method entry print class.method
print(pcn);
print('.');
println(pmn);
}
}
使用正则表达式刺探多个方法
@BTrace public class AllMethods {
@OnMethod(
clazz="/javax\\.swing\\..*/",
method="/.*/"
)
public static void m(@ProbeClassName String probeClass, @ProbeMethodName String probeMethod) {
print(Strings.strcat("entered ", probeClass));
println(Strings.strcat(".", probeMethod));
}
}
刺探获得锁之后以及释放锁之前
@BTrace public class AllSync {
@OnMethod(
clazz="/javax\\.swing\\..*/",
method="/.*/",
location=@Location(value=Kind.SYNC_ENTRY, where=Where.AFTER)
)
public static void onSyncEntry(Object obj) {
println(Strings.strcat("after synchronized entry: ", identityStr(obj)));
}
@OnMethod(
clazz="/javax\\.swing\\..*/",
method="/.*/",
location=@Location(Kind.SYNC_EXIT)
)
public static void onSyncExit(Object obj) {
println(Strings.strcat("before synchronized exit: ", identityStr(obj)));
}
}
分享到:
相关推荐
1.btrace扩展是在btrace已由功能上进行的扩展,原有功能和使用方式依然没变。目前版本扩展了两个功能:接口时间监控和接口时间调用树监控。扩展之后的btrace功能使用时都不需要写btrace脚本。 2.使用接口时间监控...
这是一个用于演示btrace功能的demo程序, 其中TestJar4是源码,使用maven作为项目管理工具 TestJar4-0.0.1-SNAPSHOT.jar为maven构建之后的jar包 AllMethod.java是trace script
6. samples:这是示例代码或脚本的集合,帮助用户了解如何在实际应用中使用BTrace,通过这些示例可以学习到BTrace的各种用法和功能。 7. docs:这个目录下通常包含BTrace的用户手册、API文档和其他技术文档,是学习...
【压缩包子文件的文件名称列表】: jdk1.8-Btrace,这表明压缩包内可能包含了Btrace与Java 1.8版本的兼容性文件。通常,这样的包会包含Btrace的二进制文件、文档、示例脚本以及可能的配置文件,方便用户在Java 1.8...
重新打开后,你应该能在插件列表中看到BTrace插件。点击“工具”菜单,如果看到BTrace的相关选项,说明插件已经成功安装。 7. **使用BTrace**:现在你可以使用BTrace进行性能调优了。选择你的目标Java进程,点击...
BTrace利用Java的JVMTI(Java Virtual Machine Tool Interface)和Serviceability Agent(SA)来提供安全、低侵入性的生产环境中的代码探查功能。 【描述】"btrace1.3.9最新版本转过来"意味着这个压缩包包含了...
Btrace利用了Java的 JVMTI (Java Virtual Machine Tool Interface) 技术,JVMTI允许外部工具如Btrace与Java虚拟机交互,提供诸如挂起线程、修改类、获取堆信息等功能。Btrace通过分析和修改类文件,实现在运行时动态...
### 二、Btrace 的主要功能 1. **类方法统计**:Btrace 可以帮助开发者追踪并统计应用程序中各个类方法的调用次数、执行时间等信息,这对于优化性能、定位热点代码至关重要。 2. **无侵略性监控**:由于Btrace 不...
开发人员可以使用这个库来编写自定义的BTrace脚本,以实现特定的监控功能。 2. **btrace-agent-1.3.9.jar**:BTrace代理是实现动态代码插桩的关键组件。它会在应用程序启动时加载,并根据客户端提供的BTrace脚本,...
BTrace Workbench则是BTrace的集成环境,它扩展了jvisualvm的功能,让开发者能够更方便地创建、调试和应用BTrace脚本。 【描述】"btrace workbench 插件jar包打包下载,jvisualvm的插件" 指出,这个资源是一个可以...
BTrace是一款强大的Java诊断工具,专用于实时、安全地进行生产环境中的应用程序性能监控和故障排查。它的核心特性在于能够在不中断程序运行的情况下,动态插入代码进行跟踪和分析,这对于理解复杂的系统行为和定位...
标题中的"BTrace"是一个专为Java平台设计的安全、动态的跟踪工具,它的主要功能是对正在运行的Java应用程序进行实时监控和诊断。BTrace利用了字节码注入的技术,能够在不修改原有代码的情况下,动态地向目标应用添加...
它通过字节码增强技术来实现这一功能,对于理解复杂系统的行为和性能问题特别有用。 描述虽然为空,但我们可以根据标题推测,这篇博文可能讲述了如何使用bTrace来跟踪Java应用程序中的线程堆栈信息。线程堆栈是程序...
**BTrace监控远程服务器使用实例** BTrace 是一个强大的、安全的、动态的Java应用程序诊断工具,它允许开发者在运行时对Java应用进行细粒度的监控和性能分析。BTrace利用了Java的动态代理机制(Java Agent)和ASM...
5. **可扩展性**:Btrace 支持与其他监控工具集成,例如日志记录框架、告警系统等,可以轻松地扩展其功能。 在 `btrace-release-1.3.11.3` 压缩包中,可能包含以下文件和目录: - `bin/`:包含 Btrace 的可执行...
8. **构建文件`: `build`目录可能包含构建BTrace的脚本或配置,这对于开发者想要定制或扩展BTrace功能时非常有用。 通过BTrace,开发者能够深入理解程序的运行状态,定位性能瓶颈,诊断并发问题,以及实施细粒度的...
### 功能特性 1. **实时性**:BTrace可以在不中断应用程序运行的情况下收集数据,这对于线上环境的性能监控和问题定位尤其有用。 2. **无侵入性**:由于不需要修改源代码,BTrace降低了对原有程序的影响。 3. **...
【标题】"btrace_extend-master" 是一个与BTrace工具相关的扩展项目,它提供了一些额外的功能和增强,以便更好地监控和诊断Java应用程序。BTrace是一款强大的动态代码分析工具,允许开发者在运行时对Java应用程序...
在给定的文件列表中,出现了"org-openjdk-btrace-visualvm.nbm",这是一个VisualVM插件。VisualVM是JDK自带的一个多合一的性能分析工具,它能提供内存、线程、CPU使用情况等多种信息。Btrace的VisualVM插件使我们...
4. **可扩展性**:BTrace 脚本可以根据需求进行定制,提供高度灵活的监控和分析功能。 5. **易用性**:BTrace 提供了一个简单的命令行界面和直观的脚本语法,使得开发者能够快速上手。 **三、BTrace 的使用步骤** ...