最近排查线上OOM的异常时用到一个强大的动态跟踪分析工具BTrace,于是花了点时间研究了下用法,这里的内容基本是对官方说明进行的翻译,顺便加了点心得.
BTrace介绍
BTrace是一个Java的动态跟踪工具,BTrace的工作的基本原理是把跟踪的代码动态替换到被跟踪的Java程序内,其实现机制是Sun Attach API + BTrace脚本解析引擎 + Objectweb ASM + JDK6 Instumentation,项目主页是在这里,用户指南点击这里.
安装BTrace
BTrace的安装非常简单,首先你需要下载BTrace,最新的版本是1.2.2,然后解压至任意目录,设置好BTRACE_HOME后将bin目录加入至环境变量PATH中即可.
使用BTrace
BTrace的使用也是非常简单,使用如下命令即可
其中,pid为你想要跟踪的Java程序的pid,Test.java为BTrace的脚本,下面我们就来看一个简单的BTrace脚本
简单解释下这里面的意思,@OnMethod告诉Btrace解析引擎需要代理的类和方法,这个例子的作用是当java.lang.Thread类的任意一个对象调用start方法后调用func方法.
BTrace重要概念与局限性
虽然BTrace很强大,但Btrace脚本就是一个普通的用@Btrace注解的Java类,其中包含一个或多个public static void修饰的方法,为了保证对目标程序不造成影响,Btrace脚本对其可以执行的动作做了很多限制
- 不能创建对象
- 不能抛出或者捕获异常
- 不能用synchronized关键字
- 不能对目标程序中的instace或者static变量
- 不能调用目标程序的instance或者static方法
- 脚本的field、method都必须是static的
- 脚本不能包括outer,inner,nested class
- 脚本中不能有循环,不能继承任何类,任何接口与assert语句
BTrace详细用法
- -I:没有这个表明跳过预编译
- include-path:指定用来编译脚本的头文件路径(关于预编译可参考例子ThreadBean.java)
- port:btrace agent端口,默认是2020
- classpath:编译所需类路径,一般是指btrace-client.jar等类所在路径
- pid:java进程id
- btrace-script:btrace脚本可以是.java文件,也可以是.class文件
- args:传递给btrace脚本的参数, 在脚本中可以通过$(), $length()来获取这些参数(定义在BTraceUtils中)
方法注解说明
- @OnMethod:指定使用当前注解的方法应该在什么情况下触发,claszz属性指定要匹配的类的全限定类名,可以用正则表达式:/类名的Pattern/匹配,用”+类名”匹配所有子类,用”@某某注解”匹配用该注解注解过的类method属性指定要匹配的方法名称,可以用正则表达式:/方法名称的Pattern/匹配type属性:void(java.lang.String)可以用于匹配:public void funcName(String param) throws Exception,location属性用@Location来表明,匹配了clazz,method情况,在方法执行的何时去执行脚本(前,后,异常,行,某个方法调用)
- @OnTimer:指定一个定时任务
- @OnExit:当脚本运行Sys.exit(code)时触发
- @OnError:当脚本运行抛出异常时触发
- @OnEvent:脚本运行时Ctrl+C可以发送事件
- @OnLowMemory:让你指定一个阀值,内存低于阀值触发
- @OnProbe:可以用一个xml文件来描述你想在什么时候触发该方法
方法参数注解说明
- @Self:目标对象本身
- @Retrun:目标程序方法返回值(Kind.RETURN)
- @ProbeClassName:目标类名
- @ProbeMethodName:目标方法名
- @targetInstance:@Location指定的clazz,method的目标(Kind.CALL)
- @targetMethodOrField:@Location指定的clazz,method的目标的方法或字段(Kind.CALL)
- @Duration:目标方法执行时间,单位是纳秒,需要与 Kind.RETURN 或者 Kind.ERROR 一起使用
这里我没有举太多例子,因为每人用BTrace的目的不一样,况且官方文档中已经有太多的例子说明,而使用方式已经在这里列出,所以就不再一一展开,后期我还总结下BTrace与jstack的用法,用来诊断OOM的问题.
相关推荐
2. **解压安装包**:使用解压缩工具(如WinRAR或7-Zip)打开并解压这个文件。解压后,你应该能看到包含BTrace插件的文件夹或者JAR文件。 3. **启动jVisualVM**:打开你的Java SDK目录,找到bin文件夹下的`jvisualvm...
【标题】"jdk1.8-Btrace.rar"指的是一个针对Java开发的特殊工具包,它包含了一个名为Btrace的在线检测插件。这个插件专为Java开发者设计,旨在帮助他们在应用程序运行时进行问题的实时定位,而无需停止或重启服务。...
2. **无侵略性监控**:由于Btrace 不修改原始代码,只是在运行时动态插入监控代码,因此它对应用的影响极小,不会引入额外的性能开销。 3. **实时反馈**:Btrace 可以实时展示监控结果,使得开发者能够迅速发现问题...
2. **安装过程** - **Linux安装**:首先,将下载的压缩包解压到任意目录,例如`/opt/btrace-1.3.9`。接着,根据系统环境设置相应的环境变量,如`JAVA_HOME`指向JDK的安装路径,然后添加`BTRACE_HOME`环境变量指向...
2. LICENSE.txt:这是一个标准的开源软件许可证文件,详细描述了用户可以如何使用、分发和修改BTrace的条款。不同的许可证有不同的要求,例如Apache License、GPL等,这会影响用户如何在商业项目中使用BTrace。 3. ...
2. **btrace-agent-1.3.9.jar**:BTrace代理是实现动态代码插桩的关键组件。它会在应用程序启动时加载,并根据客户端提供的BTrace脚本,在目标类的字节码上进行插入操作。 3. **btrace-boot-1.3.9.jar**:这个文件...
2. 虽然Btrace可以无侵入地跟踪应用程序,但过度使用可能会对性能产生影响,因此应在生产环境谨慎使用。 3. Btrace与特定的JDK版本兼容,本资源包特别提到支持JDK 11。 总的来说,Btrace是一个强大的Java调试和监控...
2. `btrace-1.3.9.zip`:这是另一种常见的压缩格式ZIP文件,同样包含了BTrace 1.3.9版本的文件,可能包括文档、源代码、二进制库等。 3. `btrace-bin-1.3.9.zip`:这个文件与前一个ZIP文件类似,但名字中包含“bin”...
**BTrace监控远程服务器使用实例** BTrace 是一个强大的、安全的、动态的Java应用程序诊断工具,它允许开发者在运行时对Java应用进行细粒度的监控和性能分析。BTrace利用了Java的动态代理机制(Java Agent)和ASM...
2. **编写脚本**:根据需求编写 BTrace 脚本,例如,追踪某个方法的调用时间、记录特定事件的发生等。 3. **运行**:通过 BTrace 的 bin 目录下的 btrace 命令行工具,指定应用程序的进程 ID 和 BTrace 脚本,启动...
2. **无侵入性**:Btrace 监控脚本不会改变原始代码,因此不会引入额外的运行时开销或导致潜在的不稳定性。 3. **丰富的监控脚本**:Btrace 提供了一种基于 Java 的脚本语言,开发者可以创建自定义的监控脚本来追踪...
2.使用接口时间监控功能,命令格式为btrace -E mCall pid clazz method,其中clazz 为需要监控的方法所在的类,method为需要监控的方法名称。例如btrace -E mCall 5100 cn.com.icegarden.test.BtraceMain spendTime ...
标题 "bTrace跟踪线程堆栈" 涉及到的是在Java开发中对线程堆栈进行监控和分析的技术,主要使用了开源工具bTrace。bTrace是一款强大的、无侵入式的Java运行时代码注入工具,允许开发者在运行中的Java应用上动态添加...
2. **监控 `List` 对象参数** 在实际应用中,我们可能需要了解方法中传递的 `List` 参数的内容。在BTrace脚本中,可以使用`args`关键字访问方法的参数,然后遍历 `List` 并打印其元素。例如,如果有一个`addElement...
btrace-bin直接解压缩配置环境变量后即可运行使用。 java监控调试工具虚拟机监控程序,利用BTrace可以在线监控java程序状态。 BTrace是一种安全,动态的Java跟踪工具。BTrace通过动态(字节码)检测正在运行的Java...
2. **解压文件**:下载完成后,解压缩文件,里面通常会包含Btrace的可执行文件和相关文档。 3. **配置环境变量**:将Btrace的bin目录添加到系统的PATH环境变量中,使得命令行可以全局访问Btrace工具。 4. **启动...
2. **脚本编写**:BTrace脚本需要遵循一定的语法,包括使用@OnMethod等注解来指定监控点。学习编写有效的BTrace脚本是使用该工具的关键。 3. **权限需求**:在生产环境中使用btrace可能需要管理员权限,因为它涉及到...
2. 在jVisualVM中加载并应用这些脚本,实时查看应用程序的状态。 3. 调试BTrace脚本,优化监控效果,确保其不影响应用程序的正常运行。 4. 分析收集的数据,找出性能瓶颈或内存泄露等问题。 5. 保存和分享你的BTrace...
2. **编写BScript**:使用BTrace特有的BScript语言编写探查脚本,定义需要追踪的行为和数据。 3. **创建Java Agent**:通过`-javaagent`选项指定BTrace的jar文件和BScript文件。 4. **运行应用**:将上述参数添加到...
2. **Linux环境下的使用**: 在Linux下安装和使用BTrace,首先需要确保系统中已安装JDK 1.7。然后,下载BTrace的压缩包,并解压。通常,压缩包中会包含以下文件: - `COPYRIGHT`:版权信息。 - `LICENSE`:软件...