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

BTrace实践

阅读更多

        今天使用了BTrace排查线上问题,发现很好用,推荐给大家。

 

  1. import static com.sun.btrace.BTraceUtils.println;  
  2. import static com.sun.btrace.BTraceUtils.*;  
  3. import com.sun.btrace.annotations.*;  
  4. import static com.sun.btrace.BTraceUtils.str;  
  5. import static com.sun.btrace.BTraceUtils.strcat;  
  6. import com.sun.btrace.BTraceUtils;  
  7. import com.sun.btrace.annotations.BTrace;  
  8. import com.sun.btrace.annotations.Kind;  
  9. import com.sun.btrace.annotations.Location;  
  10. import com.sun.btrace.annotations.OnMethod;  
  11. import com.sun.btrace.annotations.ProbeClassName;  
  12. import com.sun.btrace.annotations.ProbeMethodName;  
  13. import com.sun.btrace.annotations.TLS;  
  14. @BTrace public class CreativeBtrace{  
  15.                 @TLS  
  16.         private static long startTime = 0;  
  17.   
  18. //==================记录方法耗时======================  
  19.         @OnMethod(clazz = "/.*CreativeBOImpl/", method = "/.*updateCreativeAuditState/")  
  20.         public static void startMethod(){  
  21.                 startTime = BTraceUtils.timeMillis();  
  22.         }  
  23.   
  24.         @OnMethod(clazz = "/.*CreativeBOImpl/", method = "/.*updateCreativeAuditState/", location = @Location(Kind.RETURN))  
  25.         public static void endMethod(){  
  26.                 println(strcat("time taken=>",str(BTraceUtils.timeMillis()-startTime)));  
  27.                 println("--------------------------------------");  
  28.         }  
  29. //==================记录方法耗时======================
  30. //==================方法入参打印======================  
  31.     @OnMethod(clazz = "/.*KeywordServiceImpl/",  method = "/.*getKeywordsByIdsQscore/", location = @Location(Kind.RETURN))  
  32.         public static void onValieExit(@Self Object self,com.ali.luna.bserv.commons.dto.ServiceContext o,java.lang.Long[] keywordIds,   
  33.                         @Return com.ali.luna.bserv.dto.ResultDTO result ){  
  34.             String commandName = str(result);    
  35.             println(commandName);    
  36.             println(str(o));  
  37.                 
  38.             println(strcat("word size :",str(keywordIds.length));   
  39.              println("-------------onValieExit-------------------------");   
  40.         }   
  41.  
  42.                   

 

 

 

import static com.sun.btrace.BTraceUtils.println;
import static com.sun.btrace.BTraceUtils.*;
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.str;
import static com.sun.btrace.BTraceUtils.strcat;
import com.sun.btrace.BTraceUtils;
import com.sun.btrace.annotations.BTrace;
import com.sun.btrace.annotations.Kind;
import com.sun.btrace.annotations.Location;
import com.sun.btrace.annotations.OnMethod;
import com.sun.btrace.annotations.ProbeClassName;
import com.sun.btrace.annotations.ProbeMethodName;
import com.sun.btrace.annotations.TLS;
@BTrace public class CreativeBtrace{
                @TLS
        private static long startTime = 0;


        @OnMethod(clazz = "/.*CreativeBOImpl/", method = "/.*updateCreativeAuditState/")
        public static void startMethod(){
                startTime = BTraceUtils.timeMillis();
        }

        @OnMethod(clazz = "/.*CreativeBOImpl/", method = "/.*updateCreativeAuditState/", location = @Location(Kind.RETURN))
        public static void endMethod(){
                println(strcat("time taken=>",str(BTraceUtils.timeMillis()-startTime)));
                println("--------------------------------------");
        }

        @OnMethod(clazz = "/.*CreativeBOImpl/", method = "/.*updateCreativeAuditState/", location = @Location(Kind.RETURN))
		    public static void onValieExit(@Self Object self,java.util.List o,java.lang.Long custId, @Return Object result ){ //捕获调用对象,入参和返回值
		        String commandName = str(result);
		        println(commandName);
		        println(str(o));
		        println(custId);
		    }
        @OnMethod(clazz = "/.*CreativeBOImpl/",  method = "/.*updateCreativeAuditState/", location = @Location(Kind.RETURN))
        public static void print(@ProbeClassName String pcn,@ProbeMethodName String pmn) {
                println(pcn);
                println(pmn);
        }

	@OnMethod(clazz = "/.*KeywordServiceImpl/",  method = "/.*getKeywordsByIdsQscore/", location = @Location(Kind.RETURN))
        public static void onValieExit(@Self Object self,com.ali.luna.bserv.commons.dto.ServiceContext o,java.lang.Long[] keywordIds, 
        				@Return com.ali.luna.bserv.dto.ResultDTO result ){
            String commandName = str(result);  
            println(commandName);  
            println(str(o));
              
            println(strcat("word size :",str(keywordIds.length)); 
             println("-------------onValieExit-------------------------"); 
        }  
				
}

   功能:

   1.记录调用方法的运行时间

   2.打印调用方法的入参和返回值

 

    注意:

    1. 运行btrace时使用相同用户权限

    2. 可以在btrace中设置java_home,classpath

    3. 运行命令:  ${JAVA_HOME}/bin/java -Dcom.sun.btrace.probeDescPath=. -Dcom.sun.btrace.dumpClasses=false -Dcom.sun.btrace.debug=false -Dcom.sun.btrace.unsafe=false -cp ${BTRACE_HOME}/build/btrace-client.jar:${TOOLS_JAR}:/usr/share/lib/java/dtrace.jar:/home/guzhen.cg/btrace/bin/luna-service-interface-1.2.1.jar: com.sun.btrace.client.Main $*

 

 

推荐博客:

1. http://learnworld.iteye.com/blog/1402763

2. http://rdc.taobao.com/team/jm/archives/509

3. http://agapple.iteye.com/blog/962119 

分享到:
评论

相关推荐

    btrace release-1.2.5.1

    btrace btrace btrace btrace

    btrace扩展功能工具

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

    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:java性能调优及问题追踪工具 Btrace:java性能调优及问题追踪工具

    jdk1.8-Btrace.rar

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

    btrace1.3.9.zip

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

    btrace1.3.9

    btrace1.3.9最新版本转过来

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

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

    btrace安装包

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

    Btrace 官方zip包

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

    btrace api 1.2.chm

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

    jvisualvm btrace插件离线安装

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

    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 workbench

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

    btrace调试工具

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

    btrace_extend-master

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

    BTrace自我总结测试代码

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

    btrace-bin-1.3.11.zip

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

    BTrace实现原理

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

Global site tag (gtag.js) - Google Analytics