JVM调优(三)——基于Btrace的监控调试
简介
- Btrace可以动态地向目标应用程序的字节码注入追踪代码
- 用到的技术: JavaComplierApi、JVMTI、Agent、Instrumentation+ASM
Btrace安装入门
-
通过github搜索进行下载
-
新建环境变量BTRACE_HOME
-
添加Path:%BTRACE_HOME%in
两种运行脚本的方式
- 在JVisualVM中添加Btrace插件,添加classpath
- 使用命令行btracce <pid> <trace_script>
Btrace使用详解
拦截方法
-
普通方法
@OnMethod(clazz="",method="")
-
构造函数
@OnMethod(clazz="",method="<init>")
-
拦截同名函数,用参数区分
拦截时机
- Kind.ENTRY:入口,默认值
- Kind.RETURN:返回
- Kind.THROW:异常
- Kind.Line:行
拦截this,参数,返回值
-
this:
@Self
-
入参:可以用AnyType,也可以用真实类型,同名的用真实的
-
返回:@Return
- 简单类型:直接获取
- 复杂类型:反射,类名+属性名
其他
- 打印行号:Kind.LINE
- 打印堆栈:Thread.jstack()
- 打印环境变量
使用注意事项
- 默认只能本地运行
- 生产环境可以使用,但是被修改的字节码不会被还原