`
dawuafang
  • 浏览: 1104951 次
文章分类
社区版块
存档分类
最新评论

btrace是个好东东

 
阅读更多

今天同事遇到一个问题,测试环境和线上环境数据不一致,

由于我们的线上预发布环境只开发了80端口,所以无法debug,之前我们的做法就是在代码添加log,然后覆盖预发环境的相关jar,这个使用起来比较麻烦

早就听说btrace很方便,今天特意尝试了一下,


我们的需求就是捕捉线上某个方法的输入参数的值及返回值

step0) 安装btrace

wget http://kenai.com/projects/btrace/downloads/download/releases/release-1.2.1/btrace-bin.tar.gz并解压即可


step1) 产生一个btrace脚本

import static com.sun.btrace.BTraceUtils.*;
import com.sun.btrace.annotations.*;
import java.util.Set;
import com.sun.btrace.AnyType;

@BTrace public class GetParam {


@OnMethod( //​【1】
     clazz="xxpackage.OfferSearchImpl",
     method="getOffer",
     location=@Location(Kind.RETURN)  //【2】
     )
   public static void onGetOffer(@Return String result,@ProbeMethodName String pmn, AnyType[] args){ //【3】

        println(pmn);
        println(get(field(classOf(args[0]),"recommended",false),args[0]));//【4】
        println(result);
    }
}

  • 脚本添加注解@BTrace
  • 【1】实际就是触发点,也许是方法@OnMethod,也许是异常抛出@Error......,@OnMethod应该能覆盖绝大部分场景详见官方文档的Method Annotations
  • 【2】更细粒度的触发点,典型的就是Kind.RETURN、Kind.THROW....,有些Argument Annotations需要添加这种触发点(即仅仅第一种触发还不够),比如@Return,详见官方文档的Unannotated arguments
  • 【3】需要监控的数据,本例中使用了@Return,@ProbeMethodName,详见官方文档的Argument Annotations
  • 【4】既然拿到了监控数据,就得想办法打印出来,本例中使用了get,field,classOf来打出某个实例的某个字段,类似java中的反射,还有很多实用方法,详见BTraceUtils的API
step2)运行


然后启动btrace脚本${BTRACE_HOME}/bin/btrace ${JAVA_PID} ${PATH/TO}/GetParam.java



小结

写出了脚本之后,我们通过在不同环境中检测很快定位到了问题,如果了解了上面标出的4个关键点,并且参看官方文档以及安装文件自带的sample应该能快速的写出很多实用的监控脚本,不得不说,btrace是线上监控的利器

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    btrace release-1.2.5.1

    btrace btrace btrace btrace

    btrace扩展功能工具

    1.btrace扩展是在btrace已由功能上进行的扩展,原有功能和使用方式依然没变。目前版本扩展了两个功能:接口时间监控和接口时间调用树监控。扩展之后的btrace功能使用时都不需要写btrace脚本。 2.使用接口时间监控...

    btrace工具

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

    btrace1.3.9

    btrace1.3.9最新版本转过来

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

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

    btrace1.3.9.zip

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

    btrace api 1.2.chm

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

    BTrace-一个用于Java平台的安全动态的跟踪工具

    BTrace可用于动态跟踪正在运行的Java程序(类似于DTrace for OpenSolaris应用程序)。 BTrace动态地测试目标应用程序的类以注入跟踪代码(“字节代码跟踪”)。

    jdk1.8-Btrace.rar

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

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

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

    btrace安装包

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

    btrace workbench

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

    Btrace 官方zip包

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

    一个用于演示btrace功能的demo程序

    这是一个用于演示btrace功能的demo程序, 其中TestJar4是源码,使用maven作为项目管理工具 TestJar4-0.0.1-SNAPSHOT.jar为maven构建之后的jar包 AllMethod.java是trace script

    btrace-release-1.3.11.3.zip

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

    BTrace的安装包Windows

    BTrace

    btrace调试工具

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

    BTrace实现原理

    BTrace整个实现的原理是Java Agent+ASM+Java instrument+ Java Complier Api

    jvisualvm btrace插件离线安装

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

    jvisualvm-btrace离线安装包

    jvisualvm-btrace离线安装包。 jvisualvm btrace插件离线安装包1.2.85版本,目前官网不支持国内在线下载。 含相关依赖包:...安装时点工具-插件-已下载,点添加插件一次性将4个插件都添加进去,再点安装即可。

Global site tag (gtag.js) - Google Analytics