`
marb
  • 浏览: 410315 次
  • 性别: 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的问题.

分享到:
评论

相关推荐

    btrace release-1.2.5.1

    btrace btrace btrace btrace

    btrace扩展功能工具

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

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

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

    jdk1.8-Btrace.rar

    java 在线检测插件Btrace, 无需重启服务,即可在线定位问题

    btrace工具

    Btrace:java性能调优及问题追踪工具 Btrace:java性能调优及问题追踪工具

    btrace1.3.9.zip

    btrace1.3.9 jdk1.8 maven 编译构建 http://github.com/btraceio/btrace

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

    自己做的BTrace监控,Linux服务器上的tomcat工程,压缩包包含BTrace开发所需的jar包 BTrace简单示例代码 jvisualvm.exe如果远程服务器监控JVM虚拟机信息

    btrace1.3.9

    btrace1.3.9最新版本转过来

    btrace api 1.2.chm

    btrace api 1.2 文档,从网上扒下来自己做的,其他地方貌似都没有chm,提供给大家使用 btrace是一个跟踪、监控java程序的小工具,能够在不改变源代码的情况下监控很多东西,比如:方法运行时间、输入输出参数、抛出...

    Btrace 官方zip包

    Btrace用来做项目检测,访问过的类方法统计,无侵略性,JDK1.6

    jvisualvm btrace插件离线安装

    jvisualvm btrace插件离线安装,如果jvisualvm不能安装btrace,则可进行离线安装。 这里收集了安装btrace所需要的依赖包,直接添加 即可安装

    btrace安装包

    btrace安装包,linux和windows通用,1.3.9版本。可以直接解压缩配置环境变量后运行使用

    jvisualvm-btrace离线安装包

    jvisualvm-btrace离线安装包。 jvisualvm btrace插件离线安装包1.2.85版本,目前官网不支持国内在线下载。 含相关依赖包:jsyntaxpane-lib.nbm、net-java-btrace-api.nbm、net-java-btrace-visualvm.nbm、...

    btrace-release-1.3.11.3.zip

    Btrace Java 发布版本,Java 虚拟机监控程序

    btrace_extend-master

    btrace_extend-master,解压后上传至服务器即可以使用btrace命令

    btrace调试工具

    BTrace通过动态(字节码)检测类运行Java程序。BTrace插入跟踪行动运行Java程序的类和hotswaps跟踪程序类。 因此,也就成为我们线上跟踪生产代码的有力工具!

    btrace workbench

    btrace workbench 插件jar包打包下载,jvisualvm的插件

    btrace-bin-1.3.11.zip

    btrace-bin-1.3.11.zip 目前最近的版本,java调度的绝对利器

    BTrace自我总结测试代码

    BTrace自我学习测试代码总结,包含List对象参数,自定义对象的参数的监控。

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

    btrace支持jdk1.6上运行的版本,欢迎下载交流~

Global site tag (gtag.js) - Google Analytics