今天使用了BTrace排查线上问题,发现很好用,推荐给大家。
- 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 = "/.*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-------------------------");
- }
- }
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
相关推荐
7. **最佳实践**:使用BTrace时,应注意避免过度使用导致的性能影响。合理的脚本设计和适时的脚本移除是关键。 总的来说,BTrace 1.3.9版本为Java开发者提供了一种高效、灵活的工具,帮助他们更好地理解和优化他们...
标题 "bTrace跟踪线程堆栈" 涉及到的是在Java开发中对线程堆栈进行监控和分析的技术,主要使用了开源工具bTrace。bTrace是一款强大的、无...而 `ThreadStart.java` 文件则可能提供了具体的使用场景,便于实践和学习。
**BTrace 自我总结测试代码*...通过深入理解和实践BTrace,开发者可以更有效地诊断和优化Java应用程序,提升系统的稳定性和性能。这个自我学习测试代码集是一个很好的起点,可以帮助你掌握BTrace的基本用法和实际应用。
【标题】:“Btrace 学习1” 【描述】: BTrace 是一款强大的动态跟踪工具,它允许开发者在运行时对 Java 应用程序进行...结合提供的 "cck.jar" 和 "BCEL.jar" 文件,你可以实践并探索更多关于 BTrace 的用法和功能。
【标题解析】 "btrace-demo:demo项目" 这...总之,btrace-demo项目为学习和实践BTrace提供了一个良好的平台,通过深入研究和实践,开发者可以更好地理解和掌握Java应用程序的运行状况,提升问题解决和性能优化的能力。
"阿里巴巴故障治理领域的智能运维实践" 知识点1:智能运维实践中的故障案例分享 从给定的文件信息中,我们可以看到,阿里巴巴的故障治理领域的智能运维实践中,出现了API单位误解造成的严重故障。该故障是由于API...
9. **最佳实践**:学习如何编写高效的BTrace脚本,避免性能影响,并确保脚本的可维护性和可读性。 10. **安全和权限管理**:在生产环境中使用BTrace,必须考虑到安全和权限问题,确保只有授权的人员才能执行诊断。 ...
性能分析利器btrace探索和实践 低代码的AI探索之路 Curve文件系统在AI场景下的实践 直播微服务治理实践 前沿多媒体技术保障用户体验与创作权益 从0到1 AIGC产品应用及商业化落地实践 云可观测AIOps的智能监控和诊断...
- 工具:tcpcopy, btrace, nginx post action等。 - 场景:适用于系统支持重复写入且对写请求响应进行了特殊处理的情况。 - 注意事项:确保写请求不违反唯一性约束。 3. **请求引流** - 工具:Apache mod_jk, ...
标题《JVM Anatomy Park》指的是一个持续更新...同时,对于JVM这样复杂系统的学习,理解其内部工作机制和性能调优的方法,需要广泛阅读相关的技术文献、官方文档、技术博客以及参与实践项目,才能更全面地掌握其知识。
- Vmock-Agent:字节码增强工具,类似JVM-Sandbox和Btrace,实现无侵入、跨进程的功能。 - Vmock 控制台:提供可视化脚本和数据配置。 - VTP:自动化测试分布式调度平台,用于执行、结果计算和报告生成。 - ...
`jvm-demo1.zip`这个压缩包提供了一些实战示例,包括死锁的演示、字节码的查看以及BTrace工具的应用,帮助我们更深入地理解和掌握JVM调优技术。 首先,我们要了解JVM的基本结构和工作原理。JVM是Java程序的执行引擎...
BTrace则是一款在线的、非侵入式的生产环境监控工具,它允许开发者在不影响应用运行的情况下动态追踪和分析代码行为,从而快速定位性能问题。 总的来说,Java性能优化需要结合理论知识和实践经验。一方面,我们要...
学习的一些实践记录 =。= btrace btrace的简单学习使用 canal-es5x(TODO) canal集成es5x版本,进行mysql-es数据增量同步 rocketmq 简单学习使用 rocketMq事务机制了解学习 sharding-jdbc 学习使用,了解基础概念 ...
【everynote云笔记】是一个集合了个人学习心得与网络精华的资源库,涵盖了...这些笔记为学习和提升Java编程、分布式计算和相关IT技术提供了宝贵的资源,通过阅读和实践,能够加深对这些领域的理解并提高问题解决能力。
在技术层面,文档提及了多种监控和优化工具,例如jstat、jmap、jstack等JVM监控工具,以及btrace和greys-anatomy等性能分析工具。这些工具用于性能瓶颈的观察,以便进行针对性的优化。文档还提到了常见的优化手段,...
例如,Btrace工具就是基于Instrumentation和ASM的,理解了这两者的原理,就更容易掌握Btrace。 Robotium还提供了数据驱动测试框架,它允许使用参数化的测试用例来执行测试,这有助于在不同的数据集上重复使用测试...
在Java工具的使用上,BTrace和TProfiler等工具提供了强大的动态跟踪和分析功能。JMX(Java Management Extensions)则允许远程监控和管理Java应用程序,这对于系统的运维和故障排查非常有用。同时,学习编写各种模拟...
5. **使用BTrace**:BTrace是一个用于动态跟踪Java程序的工具,可以帮助定位到哪些方法的调用可能导致内存问题。 通过以上措施,可以有效地识别和解决Java程序中的内存溢出问题。不过,需要注意的是,增加内存大小...