Jvm与调优 imooc JVM Markdown
BTrace可以动态地向目标应用程序的字节码注入追踪代码
BTrace 只能本地执行,不支持远程
BTrace 可以在生产环境下使用,但是被修改的字节码不会被还原
JavaComplierApi、JVMTI、Agent、Instrucmentation + ASM
BTrace安装
- 下载BTrace:https://github.com/btraceio/btrace
- 新建环境变量BTRACE_HOME
- 添加Path:%BTRACE_HOME%\bin
两种运行脚本方式
- 在JVisualVM中添加Btrace插件,添加classpath
- 使用命令行btrace <pid> <trace_script>
拦截构造函数、同名函数
拦截方法
- 普通方法: :@OnMethod(clazz="",method="")
-
构造函数: : @OnMethod(clazz="",method="<init>")
tips: 构造函数在字节码层面就是init。 - 拦截同名函数,用参数区分
拦截时机
kind.ENTRY : 入口,默认值
Kind.RETURN: 返回
Kind.THROE : 异常
Kind.Line : 行
拦截this、参数、返回值
- **this: ** @Self
- 入参: 可以用AnyType,也可以用真实类型,同名的用真实的
- 返回: @Return
- 简单类型: 直接获取
- 复杂类型: 反射,类名+属性名
其他应用
- 打印行号: Kind.LINE
- 打印堆栈: Threads.jstack()
- 打印环境变量