`
marb
  • 浏览: 425936 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

BTrace2

 
阅读更多

最近排查线上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脚本对其可以执行的动作做了很多限制

  1. 不能创建对象
  2. 不能抛出或者捕获异常
  3. 不能用synchronized关键字
  4. 不能对目标程序中的instace或者static变量
  5. 不能调用目标程序的instance或者static方法
  6. 脚本的field、method都必须是static的
  7. 脚本不能包括outer,inner,nested class
  8. 脚本中不能有循环,不能继承任何类,任何接口与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的问题.

分享到:
评论

相关推荐

    jvisualvm btrace插件离线安装

    2. **解压安装包**:使用解压缩工具(如WinRAR或7-Zip)打开并解压这个文件。解压后,你应该能看到包含BTrace插件的文件夹或者JAR文件。 3. **启动jVisualVM**:打开你的Java SDK目录,找到bin文件夹下的`jvisualvm...

    jdk1.8-Btrace.rar

    【标题】"jdk1.8-Btrace.rar"指的是一个针对Java开发的特殊工具包,它包含了一个名为Btrace的在线检测插件。这个插件专为Java开发者设计,旨在帮助他们在应用程序运行时进行问题的实时定位,而无需停止或重启服务。...

    Btrace 官方zip包

    2. **无侵略性监控**:由于Btrace 不修改原始代码,只是在运行时动态插入监控代码,因此它对应用的影响极小,不会引入额外的性能开销。 3. **实时反馈**:Btrace 可以实时展示监控结果,使得开发者能够迅速发现问题...

    btrace安装包

    2. **安装过程** - **Linux安装**:首先,将下载的压缩包解压到任意目录,例如`/opt/btrace-1.3.9`。接着,根据系统环境设置相应的环境变量,如`JAVA_HOME`指向JDK的安装路径,然后添加`BTRACE_HOME`环境变量指向...

    btrace release-1.2.5.1

    2. LICENSE.txt:这是一个标准的开源软件许可证文件,详细描述了用户可以如何使用、分发和修改BTrace的条款。不同的许可证有不同的要求,例如Apache License、GPL等,这会影响用户如何在商业项目中使用BTrace。 3. ...

    btrace1.3.9.zip

    2. **btrace-agent-1.3.9.jar**:BTrace代理是实现动态代码插桩的关键组件。它会在应用程序启动时加载,并根据客户端提供的BTrace脚本,在目标类的字节码上进行插入操作。 3. **btrace-boot-1.3.9.jar**:这个文件...

    Btrace资源

    2. 虽然Btrace可以无侵入地跟踪应用程序,但过度使用可能会对性能产生影响,因此应在生产环境谨慎使用。 3. Btrace与特定的JDK版本兼容,本资源包特别提到支持JDK 11。 总的来说,Btrace是一个强大的Java调试和监控...

    btrace1.3.9

    2. `btrace-1.3.9.zip`:这是另一种常见的压缩格式ZIP文件,同样包含了BTrace 1.3.9版本的文件,可能包括文档、源代码、二进制库等。 3. `btrace-bin-1.3.9.zip`:这个文件与前一个ZIP文件类似,但名字中包含“bin”...

    BTrace监控远程服务器使用实例

    **BTrace监控远程服务器使用实例** BTrace 是一个强大的、安全的、动态的Java应用程序诊断工具,它允许开发者在运行时对Java应用进行细粒度的监控和性能分析。BTrace利用了Java的动态代理机制(Java Agent)和ASM...

    btrace支持jdk1.6上运行的版本

    2. **编写脚本**:根据需求编写 BTrace 脚本,例如,追踪某个方法的调用时间、记录特定事件的发生等。 3. **运行**:通过 BTrace 的 bin 目录下的 btrace 命令行工具,指定应用程序的进程 ID 和 BTrace 脚本,启动...

    btrace-release-1.3.11.3.zip

    2. **无侵入性**:Btrace 监控脚本不会改变原始代码,因此不会引入额外的运行时开销或导致潜在的不稳定性。 3. **丰富的监控脚本**:Btrace 提供了一种基于 Java 的脚本语言,开发者可以创建自定义的监控脚本来追踪...

    btrace扩展功能工具

    2.使用接口时间监控功能,命令格式为btrace -E mCall pid clazz method,其中clazz 为需要监控的方法所在的类,method为需要监控的方法名称。例如btrace -E mCall 5100 cn.com.icegarden.test.BtraceMain spendTime ...

    bTrace跟踪线程堆栈

    标题 "bTrace跟踪线程堆栈" 涉及到的是在Java开发中对线程堆栈进行监控和分析的技术,主要使用了开源工具bTrace。bTrace是一款强大的、无侵入式的Java运行时代码注入工具,允许开发者在运行中的Java应用上动态添加...

    BTrace自我总结测试代码

    2. **监控 `List` 对象参数** 在实际应用中,我们可能需要了解方法中传递的 `List` 参数的内容。在BTrace脚本中,可以使用`args`关键字访问方法的参数,然后遍历 `List` 并打印其元素。例如,如果有一个`addElement...

    BTrace安装包 btrace-bin-1.3.11.3.zip + btrace-src-1.3.11.3.zip

    btrace-bin直接解压缩配置环境变量后即可运行使用。 java监控调试工具虚拟机监控程序,利用BTrace可以在线监控java程序状态。 BTrace是一种安全,动态的Java跟踪工具。BTrace通过动态(字节码)检测正在运行的Java...

    btrace引导文件安装Btrace

    2. **解压文件**:下载完成后,解压缩文件,里面通常会包含Btrace的可执行文件和相关文档。 3. **配置环境变量**:将Btrace的bin目录添加到系统的PATH环境变量中,使得命令行可以全局访问Btrace工具。 4. **启动...

    btrace.jar

    2. **脚本编写**:BTrace脚本需要遵循一定的语法,包括使用@OnMethod等注解来指定监控点。学习编写有效的BTrace脚本是使用该工具的关键。 3. **权限需求**:在生产环境中使用btrace可能需要管理员权限,因为它涉及到...

    btrace workbench

    2. 在jVisualVM中加载并应用这些脚本,实时查看应用程序的状态。 3. 调试BTrace脚本,优化监控效果,确保其不影响应用程序的正常运行。 4. 分析收集的数据,找出性能瓶颈或内存泄露等问题。 5. 保存和分享你的BTrace...

    btrace调试工具

    2. **编写BScript**:使用BTrace特有的BScript语言编写探查脚本,定义需要追踪的行为和数据。 3. **创建Java Agent**:通过`-javaagent`选项指定BTrace的jar文件和BScript文件。 4. **运行应用**:将上述参数添加到...

    btrace支持jdk1.7 linux下使用

    2. **Linux环境下的使用**: 在Linux下安装和使用BTrace,首先需要确保系统中已安装JDK 1.7。然后,下载BTrace的压缩包,并解压。通常,压缩包中会包含以下文件: - `COPYRIGHT`:版权信息。 - `LICENSE`:软件...

Global site tag (gtag.js) - Google Analytics