java btrace_BTrace for Java应用程序简介

java btrace

本文的目的是学习如何使用BTrace动态跟踪/观察正在运行的Java应用程序(JDK 6+),而无需更改应用程序的代码和配置参数。

什么是BTrace?

BTrace是一个开源项目,始于2007年,最初由A.Sundararajan和K.Balasubramanian两人拥有。 由于Java One 2008会议,它获得了名声。

BTrace帮助我们查明应用程序中的复杂代码问题。 使用BTrace可以解决的问题包括代码错误,不可预测的流程,并发问题和性能问题,这些问题是在特定且通常难以重现的情况下发生的。

BTrace以程序员定义的方式动态(无需重新启动应用程序)检测(更改)应用程序的字节码。 工具的目的是查看在代码的特定区域中发生的情况。 如果超出此范围使用,则可能会损害应用程序的流程,因此验证程序禁止该操作。
例如,让我们尝试解决以下问题–重要文件每天偶尔被删除一次。 我们想要找到执行此操作的代码。 因此,如果文件名合适,我们想更改java.io.File的'delete'方法并打印调用线程的堆栈跟踪。 使用BTrace,我们可以通过编写简短的Java代码来做到这一点。

以下架构显示BTrace工作原理。

在Tar​​get JVM中,有一个动态插入的BTrace代理(使用attach API )。 BTrace客户端(BTrace命令行或具有BTrace插件的Visual VM)将命令发送到代理并获取响应。 BTrace代理会检测正在加载到目标JVM中的类,并重新加载已经加载的类。

编写跟踪脚本

编写BTrace脚本非常简单明了,其概念类似于面向方面的编程概念。

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

@BTrace
public class HelloWorld {

@OnMethod(clazz="java.io.File",method="")
public static void onNewFileCreated(String fileName) {
   BTraceUtils.println("New file is being created");
   BTraceUtils.println(fileName);
}

每个BTrace脚本均由探针(Aspects lang语中的切入点)和操作(建议)组成。 探针定义何时应执行检测。 动作定义了检测。
探针可以包括以下内容:

  • 方法进入/退出
  • 电话号码
  • 字段已更新/已访问
  • 方法调用/返回(在指定方法内)
  • 异常抛出(之前)
  • 同步进入/退出
  • 计时器
  • 构造器入口

BTrace的能力和局限性

能力

  • 动态连接到任何Java6 +应用程序并运行任何(*)代码

局限性

  • 出于安全考虑,必须与运行跟踪应用程序的用户使用同一用户运行
  • 仅支持Hotspot JVM
  • 与目标应用程序分开编译–不熟悉应用程序类
  • 可能会破坏目标应用程序–我在寿命很长的设置上运行了BTrace,该设置包含很多跟踪脚本。 目标应用程序甚至没有崩溃过。

先进的BTrace

BTrace社区实际上由一个定期在项目上工作的开发人员组成。 因此,不要期望在接下来的版本中有太多的改进和许多新功能。 (这是一个为项目做出贡献的好机会,因为每个开发人员都会极大地促进开发工作)。

该项目的文档应该得到显着改善–我发现自己在将这个框架集成到我现有的框架中时曾多次猜测。 BTrace论坛是获取有关框架答案的好方法。

为了了解BTrace的魔力是如何工作的,需要三个领域的知识-“ Java代理开发”,“ java中的字节码操作”和“ Java附加api”。 我将来可能会写一些这些领域。

相关链接

http://www.parleys.com/#st=5&id=1618&sl=1
http://kenai.com/projects/btrace

参考: The Art of Java博客的JCG合作伙伴 Art Gourevitch 对BTrace的介绍


翻译自: https://www.javacodegeeks.com/2012/06/introduction-to-btrace-for-java.html

java btrace

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值