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 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值