Btrace

作者: 不知名的程序员 | 来源:发表于2019-03-05 17:36 被阅读25次

在之前介绍Java Agent的这篇文章中,简单介绍了Java agent的应用,里面提到了基于Java agent实现的线上调试利器Btrace,当我们想定位线上问题却苦于没有日志时,可以使用Btrace attach到线上进程,动态的修改线上代码,从而达到既保留现场又能定位问题的效果。

Btrace的quickstart十分简单,并不需要有Java agent的基础。项目的git地址是Btrace,我们找到release将Btrace下载下来,下载解压之后直接点进去doc文件夹里的userguide,我们就可以按照例子进行模仿开发了。

Btrace开发流程

这里写一个简单的使用Btrace脚本的例子,方便大家熟悉下开发Btrace脚本的流程。

1.首先启动一个目标Java程序,这是我们Btrace脚本要attach的进程。

2.编写Btrace脚本,新建一个maven工程,导入Btrace相关依赖即可进行开发

由于直接起的公司项目,打码了

@Btrace注解代表这是一个Btrace脚本。@OnMethod代表着我们注解的这个方法监控目标进程的监控点,即该方法要在什么时候运行,这里监控指定类的btrace方法,并且在方法返回时运行。params1代表着传入btrace方法的参数,若参数有多个,Btrace脚本的监控方法同样可以指定多个。被@Return注解的参数代表着btrace方法的返回值,注意这里的类型并不是Object而是AnyType。

3.使用jps命令找到目标进程的pid

4.使用终端进入之前我们下载的Btrace压缩包的bin目录,使用btrace命令指定要attach的进程pid,运行我们编写的Btrace脚本。

5.最后我们调用目标进程的btrace方法,即可在终端看到我们传入方法的参数与方法返回值了。

Btrace的注解

关于注解这里就偷下懒了。。。它的注解不多,用法也相对简单,上面的几个注解相信光看程序就可以了解其用法了,具体其他的注解以及使用大家查阅userguide里的示例程序就能够掌握,这里就不细说了。

Btrace的unsafe模式

Btrace脚本正常情况下是运行在safe模式下的,这意味着它对程序是只读的,不能对其进行修改,在safe模式下使用它有很多的限制,例如不能创建对象,不能抛出异常,不能有循环代码,不能调用外部类的方法等。正常情况下,如果我们只是想获取一些日志打印信息等,并不需要打破它的限制,但有时我们可能在跟踪方法中调用JDK原生类的方法(safe模式下只允许调用BTraceUtils类中的方法),这时我们可以在使用btrace命令时加上 -u 参数,代表着Btrace脚本将运行在unsafe模式下。

Btrace进阶

虽然Btrace功能强大,但也还是有一些限制,比如无法方法中获取局部变量的值等。这时可以使用Jboss的Byteman工具,它的功能更加强大,只是它的写法更类似于Shell脚本,对于Java程序员来说相对不太友好,但是不影响它成为一个强大的辅助工具(感兴趣的可以去官网下载并阅读文档了解用法,以后有时间会写一下它的使用)。

最后

在线上环境运行之前一定要在本地调试下你的Btrace脚本程序,否则如果一个不小心脚本报错会影响线上行为。

附赠几个有用的Btrace脚本:如何在生产环境使用Btrace进行调试Btrace入门到熟练小工完全指南,由于二者在关于典型场景部分几个例子都差不多,所以就都贴出来了。

相关文章

  • Btrace学习笔记二

    Btrace拦截行号 被拦截对象(Btrace只能在本地运行) 拦截行号的btrace脚本 运行btrace脚本 ...

  • Btrace UserGuide翻译转载

    原文地址:BTrace用户手册<译> BTrace(https://btrace.dev.java.net/) 是...

  • BTrace:线上问题排查工具

    BTrace简介 GitHub地址:BTrace 下载地址:v1.3.11.3 官方使用教程:Btrace使用教程...

  • btrace-doc

    btrace on github demo 动态获取传入参数 源码 btrace脚本(PrintArgSimple...

  • 使用Btrace进行代码调试

    Btrace简介 Btrace是SUN公司开发的一款动态的Trace工具.Btrace最大的好处是可以自己编写脚本...

  • BTrace:Java 线上问题排查神器

    BTrace 是什么 BTrace 是检查和解决线上的问题的杀器,BTrace 可以通过编写脚本的方式,获取程序执...

  • 用btrace分析线上服务

    部署 btrace1.2.5.1已经部署到集群/home/xjyin/btrace-1.2.5.1 使用方式 基本...

  • btrace

    BTrace的最大好处,是可以通过自己编写的脚本,获取应用的一切调用信息。而不需要不断地修改代码,加入System...

  • Btrace

    入门 拦截方法 拦截时机 拦截this,参数,返回值 获取对象的值 其他 参考 https://github.co...

  • Btrace

    在之前介绍Java Agent的这篇文章中,简单介绍了Java agent的应用,里面提到了基于Java agen...

网友评论

    本文标题:Btrace

    本文链接:https://www.haomeiwen.com/subject/amcnuqtx.html