相关文章:
当生产环境出现问题时,我们可能会需要获取程序运行时的相关参数来进行分析,而常规方法需要修改代码,将相关参数输入到日志中,再将项目重新发布到生产环境。不过要是这么做,一是十分繁琐,二是风险较大,此时 Btrace 就登场了
一、安装 Btrace
-
首先我们先上官网 (btrace) 下载 Btrace,这里我下载的是 1.3.11.3 版本
-
接着配置 Btrace 环境变量 (替换成自己的安装路径)
环境变量 变量值 JAVA_HOME D:\MySoftware\Java\jdk8.0\jdk1.8.0_151 BTRACE_HOME D:\MySoftware\Btrace\btrace-bin-1.3.11.3 PATH %JAVA_HOME%\bin,%BTRACE_HOME%\bin -
检查是否安装成功
二、搭建 Btrace 脚本项目
-
实际上就是搭建一个 SpringBoot 项目,引入 Btrace 的三个相关 jar 包即可
<dependency> <groupId>com.sun.btrace</groupId> <artifactId>btrace-agent</artifactId> <version>1.3.11.3</version> <type>jar</type> <scope>system</scope> <systemPath>D:\MySoftware\Btrace\btrace-bin-1.3.11.3\build\btrace-agent.jar</systemPath> </dependency> <dependency> <groupId>com.sun.btrace</groupId> <artifactId>btrace-boot</artifactId> <version>1.3.11.3</version> <type>jar</type> <scope>system</scope> <systemPath>D:\MySoftware\Btrace\btrace-bin-1.3.11.3\build\btrace-boot.jar</systemPath> </dependency> <dependency> <groupId>com.sun.btrace</groupId> <artifactId>btrace-client</artifactId> <version>1.3.11.3</version> <type>jar</type> <scope>system</scope> <systemPath>D:\MySoftware\Btrace\btrace-bin-1.3.11.3\build\btrace-client.jar</systemPath> </dependency>
-
这里需要注意的是,1.3.11.3 版本的 jar 包无法在中央仓库中找到 (中央仓库中最高版本为 1.2.3),因此我们需要在 Btrace 根目录的 build 文件夹下找到这三个 jar 包,再通过本地依赖来进行引入
三、运行 Btrace 脚本
-
使用命令行 btrace <trace_script>
-
HelloController.java
@RestController public class HelloController { @GetMapping(value = "/arg/simple/{name}") public String argSimple(@PathVariable("name") String name) { return "Hello " + name + "!"; } }
-
PrintArgSimple.java
@BTrace public class PrintArgSimple { @OnMethod(clazz = "com.xj.controller.HelloController", method = "argSimple") public static void test(@ProbeClassName String pcn, @ProbeMethodName String pmn, AnyType[] args) { BTraceUtils.printArray(args); BTraceUtils.println(pcn + " , " + pmn); BTraceUtils.println(); } }
-
如上所示,PrintArgSimple 即为 Btrace 脚本 (Btrace 脚本可以与需要监控的代码完全隔离)
-
此处脚本用于监控 argSimple() 方法所在类的类名、方法名以及入参
-
-
运行脚本
-
先运行 HelloController 类所在的项目,端口为 9998
-
再运行 Btrace 脚本,对 argSimple() 方法进行监控
-
然后在浏览器中调用 “/arg/simple/{name}” 接口
-
此时在 cmd 中就会实时输出 argSimple() 方法所在类的类名、方法名以及入参
-
-
-
在 JVisualVM 中添加 Btrace 插件
-
按照之前添加 Visual GC 的方式来添加 Btrace 插件
-
然后打开 JVisualVM,选中 HelloController 类所在的 Java 进程,右击选择 Trace application
-
然后我们将之前编写好的脚本直接复制进来运行即可
-
最后在浏览器中调用 “/arg/simple/{name}” 接口
-
此时在 Output 中就会实时输出 argSimple() 方法所在类的类名、方法名以及入参
-