JVM(五)--Btrace 第一章 安装、下载、实战入门

  • 前言

  • 什么是Btrace呢?

答:就是在程序不重启,正在运行的情况下动态的修改字节码。

  • Btrace用到什么技术呢?

JavaComplierAp、JVMTI、Agent、Instrumentation+ASM

  • Btrace安装

  1. 新建环境变量BTRACE_HOME
  2. 添加Path:%BTRACE_HOME%\bin

下载的对应系统版本的btrace网址

https://github.com/btraceio/btrace

操作演示 下载zip和环境变量配置.

JVM(五)--Btrace 第一章 安装、下载、实战入门

  • 两种运行脚本方式

  • 在JVisualVM中添加Btrace插件,添加classpath
  • 使用命令行btrace <pid> <trace_script>

 

  • Btrace实战

import com.gisquest.realestate.vo.ResponseBodyVo;
import com.gisquest.realestate.vo.ResponseStatus;
import org.springframework.web.bind.annotation.*;

/**
 * Btrace实战:如何在程序不做修改的情况下获取name参数
 *
 * @param * @Param: null
 * @return
 * @date 2019-01-23 15:18
 */
@RestController
@RequestMapping("ch4")
public class BtraceDemoController {

    @RequestMapping("/arg1")
    public
    @ResponseBody
    ResponseBodyVo<String> arg1(@RequestParam("name") String name) {
        return new ResponseBodyVo<>(ResponseStatus.OK, "hello" + name);
    }
}
package com.gisquest.zrzy.platform.client.frmdept;

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

/**
 * class method location 声明:
 * 拦截com.gisquest.zrzy.platform.client.frmdept.BtraceDemoController下的arg1方法,并且在入口处拦截
 * PS:通过BTrace标签声明,以下是Btrace脚本,Btrace与实际的java代码没有关系,不存在偶合
 *
 * @param
 * @return
 * @date 2019-01-23 15:37
 */
@BTrace
public class PrintArgSimple {

    @OnMethod(
            clazz = "com.gisquest.zrzy.platform.client.frmdept.BtraceDemoController",
            method = "arg1",
            location = @Location(Kind.ENTRY)
    )

    /**
     * 通过规则ID获取数据
     *
     * @Param: pcn 拦截方法类的类名
     * @Param: pmn 拦截的方法名
     * @Param: args 参数
     * @return void
     * @date 2019-01-23 15:44
     */
    public static void anyRead(@ProbeClassName String pcn, @ProbeMethodName String pmn, AnyType[] args) {
        BTraceUtils.printArray(args);
        BTraceUtils.println(pcn + "," + pmn);
        BTraceUtils.println();
    }
}
  • Btrace监控命令操作

  • 可支持命令

JVM(五)--Btrace 第一章 安装、下载、实战入门

  • 命令操作

JVM(五)--Btrace 第一章 安装、下载、实战入门

注意:如果是在方法中写了注释,汇报错GBK等...,返回的数组是参数 AnyType[]

  • 插件操作
  • 看上一篇文章,注意路径,勾选BTrace Workbench即可,安装完后选中项目进程我自己是MicroPlatformApp,右键Trace aplication 

未完待续。。。。