首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BTrace常用场景示例

BTrace常用场景示例

作者头像
十毛
发布2019-03-27 11:45:16
6230
发布2019-03-27 11:45:16
举报

BTrace是线上不重启服务的情况下定位问题的神器,本文介绍了最常用的几种场景

定位慢调用

查看com.tim.BtraceCase#count耗时很长时的上下文:入参、成员变量等信息

@BTrace
public class Debug {
    @OnMethod(
            clazz = "com.tim.BtraceCase", 
            method = "count", 
            location = @Location(value = Kind.RETURN)
    )
    public static void run(@Self Object self, int number, @Duration long duration) {
        if (duration / 1000000 > 100) {
            println("cost: " + duration / 1000000);
            final Object sum =get(field(classOf(self), "sum"), self); //成员变量
            println("sum: " + sum);
            jstack();  //调用栈
            println("----");  //刷新缓存,否则有部分信息没有显示
        }
    }
}

异常上下文

比如当com.tim.BtraceCase#count方法抛出异常时,捕获异常信息及入参以及对象实例信息。其中关键是location = @Location(value = Kind.ERROR)

@BTrace
public class Debug {
    @OnMethod(
            clazz = "com.tim.BtraceCase", 
            method = "count", 
            location = @Location(value = Kind.ERROR)
    )
    public static void run(@Self Object self, int number, @TargetInstance Throwable e) {
        println("number: " + number); //入参
        println(e); //异常信息
        final Object sum =get(field(classOf(self), "sum"), self); //成员变量
        println("sum: " + sum); 
        jstack();  //调用栈
        println("----");  //刷新缓存,否则有部分信息没有显示
    }
}

输出内容:

number: 4100
java.lang.IllegalArgumentException: data should not be divided by 100
sum: 8407050
com.tim.BtraceCase.count(BtraceCase.java:22)
com.tim.BtraceCase.main(BtraceCase.java:10)
----

输出统计信息

http://github.com/btraceio/btrace/blob/master/samples/Histogram.java

BTrace系列

参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.11.01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定位慢调用
  • 异常上下文
  • 输出统计信息
  • BTrace系列
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档