BTrace-Java应用的动态监控工具

BTrace是一款安全可靠的Java动态跟踪工具,通过ASM、Java Attach API、Instruments对运行中的Java程序进行字节码增强。其限制包括禁止创建对象、抛出异常等,但可通过@BTrace(unsafe = true)注解启用unsafe模式。本文介绍了BTrace的架构、安装和使用步骤,包括编写BTrace脚本和将其应用于Java应用。在使用时需注意,BTrace脚本仅限本地运行,生产环境中需谨慎避免影响性能。
摘要由CSDN通过智能技术生成

引子

最近看了美团的一篇文章Java动态追踪技术探究,产生了一种强烈的共鸣,卧槽,这也太炫酷了吧。好吧,各位看官请放下手中的屠刀,原谅我这个菜鸡。

简介

看到这里的,应该原谅我这个小菜鸡了,既然如此就来说说这个BTrace。

BTrace github地址

https://github.com/btraceio/btrace

BTrace是Java的安全可靠的动态跟踪工具。 它的工作原理是通过 ASM、Java Attach Api、Instruments 来对正在运行的java程序中的class类进行动态增强。也就是说btrace可以在Java程序运行时,动态地向目标应用程序的字节码注入追踪代码。这样,当某个程序出现bug,无需线上重启服务器也可以追踪bug,这里说的不能重启一是线上服务器不能重启,二是重新编译部署后bug也很有可能无法重现。

说他是安全可靠的,是因为它对正在运行的程序是只读的。也就是说,他可以插入跟踪语句来检测和分析运行中的程序,不允许对其进行修改。因此他存在一些限制:

  • 不能创建对象
  • 不能创建数组
  • 不能抛出和捕获异常
  • 不能调用任何对象方法和静态方法
  • 不能给目标程序中的类静态属性和对象的属性进行赋值
  • 不能有外部、内部和嵌套类
  • 不能有同步块和同步方法
  • 不能有循环(for, while, do…while)
  • 不能继承任何的类
  • 不能实现接口
  • 不能包含assert断言语句

这些限制其实是可以使用unsafe模式绕过。通过在BTrace脚本中声明 @BTrace(unsafe = true) 注解 ,并且使用 -u 选项,指定以 unsafe 模式运行btrace即可

注:实际使用非安全模式跟踪时,发现一个问题,一个进程如果被安全模式btrace探测过一次, 后面再使用非安全模式进行探测时非安全模式不生效。

那么BTrace的架构是怎样的?
BTrace主要有下面几个模块:

  • BTrace脚本:利用BTrace定义的注解,我们可以很方便地根据需要进行脚本的开发。
  • Compiler:将BTrace脚本编译成BTrace class文件。
  • Client:将class文件发送到Agent。
  • Agent:基于Java的Attach Api,Agent可以动态附着到一个运行的JVM上,然后开启一个BTrace Server,接收client发过来的BTrace脚本;解析脚本,然后根据脚本中的规则找到要修改的类;修改字节码后,调用Java Instrument的reTransform接口,完成对对象行为的修改并使之生效。

UML图

安装

安装过程在这里不做介绍了,一般下载好之后,配置下环境变量就可以了。

使用

1. 创建待监控的程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值