`
gigi_112
  • 浏览: 114633 次
  • 性别: 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 

分享到:
评论

相关推荐

    btrace1.3.9

    7. **最佳实践**:使用BTrace时,应注意避免过度使用导致的性能影响。合理的脚本设计和适时的脚本移除是关键。 总的来说,BTrace 1.3.9版本为Java开发者提供了一种高效、灵活的工具,帮助他们更好地理解和优化他们...

    bTrace跟踪线程堆栈

    标题 "bTrace跟踪线程堆栈" 涉及到的是在Java开发中对线程堆栈进行监控和分析的技术,主要使用了开源工具bTrace。bTrace是一款强大的、无...而 `ThreadStart.java` 文件则可能提供了具体的使用场景,便于实践和学习。

    BTrace自我总结测试代码

    **BTrace 自我总结测试代码*...通过深入理解和实践BTrace,开发者可以更有效地诊断和优化Java应用程序,提升系统的稳定性和性能。这个自我学习测试代码集是一个很好的起点,可以帮助你掌握BTrace的基本用法和实际应用。

    Btrace 学习1

    【标题】:“Btrace 学习1” 【描述】: BTrace 是一款强大的动态跟踪工具,它允许开发者在运行时对 Java 应用程序进行...结合提供的 "cck.jar" 和 "BCEL.jar" 文件,你可以实践并探索更多关于 BTrace 的用法和功能。

    btrace-demo:demo项目

    【标题解析】 "btrace-demo:demo项目" 这...总之,btrace-demo项目为学习和实践BTrace提供了一个良好的平台,通过深入研究和实践,开发者可以更好地理解和掌握Java应用程序的运行状况,提升问题解决和性能优化的能力。

    阿里巴巴故障治理领域的智能运维实践

    "阿里巴巴故障治理领域的智能运维实践" 知识点1:智能运维实践中的故障案例分享 从给定的文件信息中,我们可以看到,阿里巴巴的故障治理领域的智能运维实践中,出现了API单位误解造成的严重故障。该故障是由于API...

    btrace-sr:BTrace 实战学习笔记,其号称“线上问题追踪神器”

    9. **最佳实践**:学习如何编写高效的BTrace脚本,避免性能影响,并确保脚本的可维护性和可读性。 10. **安全和权限管理**:在生产环境中使用BTrace,必须考虑到安全和权限问题,确保只有授权的人员才能执行诊断。 ...

    QCon 2023全球软件开发大会北京站(公开)PPT汇总(76份).zip

    性能分析利器btrace探索和实践 低代码的AI探索之路 Curve文件系统在AI场景下的实践 直播微服务治理实践 前沿多媒体技术保障用户体验与创作权益 从0到1 AIGC产品应用及商业化落地实践 云可观测AIOps的智能监控和诊断...

    阿里线上压测与容量规划实践

    - 工具:tcpcopy, btrace, nginx post action等。 - 场景:适用于系统支持重复写入且对写请求响应进行了特殊处理的情况。 - 注意事项:确保写请求不违反唯一性约束。 3. **请求引流** - 工具:Apache mod_jk, ...

    jvm-anatomy-park-complete

    标题《JVM Anatomy Park》指的是一个持续更新...同时,对于JVM这样复杂系统的学习,理解其内部工作机制和性能调优的方法,需要广泛阅读相关的技术文献、官方文档、技术博客以及参与实践项目,才能更全面地掌握其知识。

    企业IT高效自动化实践和快速反馈.pptx

    - Vmock-Agent:字节码增强工具,类似JVM-Sandbox和Btrace,实现无侵入、跨进程的功能。 - Vmock 控制台:提供可视化脚本和数据配置。 - VTP:自动化测试分布式调度平台,用于执行、结果计算和报告生成。 - ...

    jvm-demo1.zip

    `jvm-demo1.zip`这个压缩包提供了一些实战示例,包括死锁的演示、字节码的查看以及BTrace工具的应用,帮助我们更深入地理解和掌握JVM调优技术。 首先,我们要了解JVM的基本结构和工作原理。JVM是Java程序的执行引擎...

    Java性能优化.docx

    BTrace则是一款在线的、非侵入式的生产环境监控工具,它允许开发者在不影响应用运行的情况下动态追踪和分析代码行为,从而快速定位性能问题。 总的来说,Java性能优化需要结合理论知识和实践经验。一方面,我们要...

    java8源码-somethingnew:各种演示在这里

    学习的一些实践记录 =。= btrace btrace的简单学习使用 canal-es5x(TODO) canal集成es5x版本,进行mysql-es数据增量同步 rocketmq 简单学习使用 rocketMq事务机制了解学习 sharding-jdbc 学习使用,了解基础概念 ...

    everynote云笔记

    【everynote云笔记】是一个集合了个人学习心得与网络精华的资源库,涵盖了...这些笔记为学习和提升Java编程、分布式计算和相关IT技术提供了宝贵的资源,通过阅读和实践,能够加深对这些领域的理解并提高问题解决能力。

    酒旅促销-分享.09f73b10-ab11-11e6-8fc4-73b1dfa60ac8.pdf

    在技术层面,文档提及了多种监控和优化工具,例如jstat、jmap、jstack等JVM监控工具,以及btrace和greys-anatomy等性能分析工具。这些工具用于性能瓶颈的观察,以便进行针对性的优化。文档还提到了常见的优化手段,...

    robotium测试很好的教程

    例如,Btrace工具就是基于Instrumentation和ASM的,理解了这两者的原理,就更容易掌握Btrace。 Robotium还提供了数据驱动测试框架,它允许使用参数化的测试用例来执行测试,这有助于在不同的数据集上重复使用测试...

    Java工程师成神之路~-HollisChuang's Blog1

    在Java工具的使用上,BTrace和TProfiler等工具提供了强大的动态跟踪和分析功能。JMX(Java Management Extensions)则允许远程监控和管理Java应用程序,这对于系统的运维和故障排查非常有用。同时,学习编写各种模拟...

    JAVA程序内存溢出问题原因分析

    5. **使用BTrace**:BTrace是一个用于动态跟踪Java程序的工具,可以帮助定位到哪些方法的调用可能导致内存问题。 通过以上措施,可以有效地识别和解决Java程序中的内存溢出问题。不过,需要注意的是,增加内存大小...

Global site tag (gtag.js) - Google Analytics