侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Btrace使用说明

2022-06-10 星期五 / 0 评论 / 0 点赞 / 85 阅读 / 4054 字

当我们的线上环境出现问题,而又没有日志打印出来时,生产环境又不能远程debug,这个时候要怎么办呢?能不能在程序运行的时候查看程序正在执行的入参,出参,执行过程等。Btrace就是一个好用的工具来动态

当我们的线上环境出现问题,而又没有日志打印出来时,生产环境又不能远程debug,这个时候要怎么办呢?

能不能在程序运行的时候查看程序正在执行的入参,出参,执行过程等。Btrace就是一个好用的工具来动态的跟踪正在运行的Java程序。

使用

1 下载Btrace,解压到本地的目录中。

wget -c https://github.com/btraceio/btrace/releases/download/v1.3.11.3/btrace-bin-1.3.11.3.tgztar -xf btrace-bin-1.3.11.3.tgz -Cmkdir ~/software/btracetar -xf btrace-bin-1.3.11.3.tgz -C ~/software/btracels ~/software/btraceCHANGELOG.md                LICENSE                     README.md                   bin                         docsCOPYRIGHT                   LICENSE-3RD-PARTY.txt       THIRDPARTYLICENSEREADME.txt build                       samples~/software/btrace/bin/btrace --versionBTrace v.1.3.11.3 (20181217)

2 编写Btrace脚本,前提是首要要有我们生产环境的代码可以用于trace,首先提供一段生产环境中MVC的代码。

    @RequestMapping("/btrace")    @ResponseBody    public Set btraceTest(            String s1,            String s2    ){        HashSet<Object> set = new HashSet<>();        set.add(s1);        set.add(s2);        return set;    }

3 导入我们的Btrace包下的jar包,引入项目,进行使用。

ls ~/software/btrace/buildbtrace-agent.jar  btrace-boot.jar   btrace-client.jar i386

4 编写Btrace脚本,以刚才的MVC 入口为例。

package me.aihe.jmxdemo;import com.sun.btrace.BTraceUtils;import com.sun.btrace.annotations.*;import java.util.Set;@BTracepublic class BtraceDemo {    @OnMethod(clazz = "me.aihe.jmxdemo.JmxdemoApplication", method = "btraceTest", location = @Location(Kind.RETURN))    public static void methodDetail(@Self Object self, String s1, String s2, @Return Set result, @Duration long time) {        BTraceUtils.println();        BTraceUtils.println();        BTraceUtils.println("方法调用栈: ");        BTraceUtils.println("入参1:" + s1 + ",入参2:" + s2);        BTraceUtils.println("返回值: result=" + result);        BTraceUtils.println("时间(ns): " + time);        BTraceUtils.println();    }}

5 查看我们正在运行的JVM程序,获取其PID,然后使用Btrace执行脚本

jps26040 JmxdemoApplication# 语法:btrace pid btrace脚本位置~/software/btrace/bin/btrace 26040 /Users/aihe/IdeaProjects/jmxdemo/src/main/java/me/aihe/jmxdemo/BtraceDemo.java

6 还有更多的使用案例,在下载的包中已经有提供:

注意点

编写的脚本参数名称要与我们代码中的参数名称一样。

最后

可以看到我们并没有修改线上的任何代码,就可以直接看到线上代码正在运行的执行情况,在排查问题时又增加了一大利器。

.
.

广告 广告

评论区