应用场景:
服务器不适合重启,调试信息又不足够进行排错分析的时候
工具:
添加插件BTrace的 VisualVM (工具-插件,安装)
操作步骤:
选择应用程序右键,选择traceApplication选项
编写代码
书本中的例子:
/* BTrace Script Template */
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
@BTrace
public class TracingScript {
/* put your code here */
@OnMethod(clazz="com.jiang.JavaVmMemory.BTraceTst",method="add",location=@Location(Kind.return))
public static void func(@Self com.jiang.JavaVmMemory.BTraceTst instance,int a,int b,@Return int result){
println("call:");
jstack();
println(strcat("method param A:",str(a)));
println(strcat("method param B:",str(b)));
println(strct(strcat("mehod result:",str(result))));
}
}
点击start...
操作应用程序,可以查看到需要的信息
原理分析:
BTrace 主要使用了 Instrumentation + ASM技术来实现对正在运行进程的探测。
Instrumentation :
构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的 定义。实际上提供了一种虚拟机级别支持的 AOP 实现方式,使得开发者无需对 JDK 做任何升级和改动,就可以实现某 些 AOP 的功能了。
ASM:
ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。
具体的原理分析及语法 https://www.jianshu.com/p/93e94b724476