茂展的分享博客

深入学习JVM调优(二)

深入学习JVM调优(二)

Btrace

Btrace可以动态地向目标应用程序的字节码注入追踪代码

安装Btrace

首先我们去github下载然我去下载

开始安装

1.解压到指定的目录
2.新建环境变量BTRACE_HOME,设置成项目的地址
3.添加Path: %BTRACE_HOME%\bin

运行Btrace

第一种: 在JVisualVM中添加Btrace插件,添加classpath

第二种: 使用命令行 btrace < pid> < trace_script>

引入依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<dependency>
<groupId>com.sun.btrace</groupId>
<artifactId>btrace-agent</artifactId>
<version>1.3.11</version>
<type>jar</type>
<scope>system</scope>
<systemPath>F:/JaveWeb/btrace/build/btrace-agent.jar</systemPath>
</dependency>
<dependency>
<groupId>com.sun.btrace</groupId>
<artifactId>btrace-boot</artifactId>
<version>1.3.11</version>
<type>jar</type>
<scope>system</scope>
<systemPath>F:/JaveWeb/btrace/build/btrace-boot.jar</systemPath>
</dependency>
<dependency>
<groupId>com.sun.btrace</groupId>
<artifactId>btrace-client</artifactId>
<version>1.3.11</version>
<type>jar</type>
<scope>system</scope>
<systemPath>F:/JaveWeb/btrace/build/btrace-client.jar</systemPath>
</dependency>

编写脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.nyist.controller;

import com.sun.btrace.AnyType;
import com.sun.btrace.BTraceUtils;
import com.sun.btrace.annotations.BTrace;
import com.sun.btrace.annotations.Kind;
import com.sun.btrace.annotations.Location;
import com.sun.btrace.annotations.OnMethod;
import com.sun.btrace.annotations.ProbeClassName;
import com.sun.btrace.annotations.ProbeMethodName;



@BTrace
public class PrintArgSimple {


@OnMethod(
clazz = "com.nyist.controller.BTraceController",

method = "arg1",

location = @Location(Kind.ENTRY)
)
public static void anyRead(@ProbeClassName String pcn,
@ProbeMethodName String pmn,
AnyType[] args
) {

BTraceUtils.printArray(args);

BTraceUtils.println("className: " + pcn);
BTraceUtils.println("MethodName: " + pmn);
BTraceUtils.println();
}
}

然后我们启动我们的项目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.nyist.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/btrace")
public class BTraceController {

@RequestMapping("/arg1")
public String arg1(@RequestParam("name") String name) {
return "hello: " + name;
}
}

结果是:
Btrace使用命令行

------本文结束感谢阅读------
🐶 您的支持将鼓励我继续创作 🐶