/ Sylinx / btrace跟踪接口调用时间

btrace跟踪接口调用时间

2014-01-10 posted in [开发经验]

可用来定位是否http接口过慢问题,最好在服务出问题才使用该方法定位

进入到/root/tool/btrace/bin

用jps查看MetadataServerLauncher 进程号 ./btrace 进程号 HttpServiceProbe.java

./btrace 29633 HttpServiceProbe.java

输出结果:

[root@tsung3924 bin]# ./btrace 29633 HttpServiceProbe.java

entering HttpService  com.snda.youni.wine.metadata.service.HttpService.get
http://10.192.10.1
leaving HttpService  com.snda.youni.wine.metadata.service.HttpService.get
Time taken (sec) 0.00796


entering HttpService  com.snda.youni.wine.metadata.service.HttpService.get
http://10.192.10.1
leaving HttpService  com.snda.youni.wine.metadata.service.HttpService.get
Time taken (sec) 0.008272


entering HttpService  com.snda.youni.wine.metadata.service.HttpService.get
http://10.192.10.1
leaving HttpService  com.snda.youni.wine.metadata.service.HttpService.get
Time taken (sec) 0.008154

entering HttpService  com.snda.youni.wine.metadata.service.HttpService.get
http://10.192.10.1
leaving HttpService  com.snda.youni.wine.metadata.service.HttpService.get
Time taken (sec) 0.008569

HttpServiceProbe 示例,监控其它类可自己修改

import static com.sun.btrace.BTraceUtils.*;
import com.sun.btrace.annotations.*;
import java.util.*;
import java.lang.*;

@BTrace class HttpServiceProbe {
        @OnMethod(clazz = "com.snda.youni.wine.metadata.service.HttpService", method = "get")
        public void onGet(@ProbeClassName String pcn,
                        @ProbeMethodName String pmn) {
                print("entering HttpService  ");
                println(Strings.strcat(Strings.strcat(pcn, "."), pmn));
        }
        @OnMethod(clazz = "com.snda.youni.wine.metadata.service.HttpService", method = "get", location = @Location(Kind.RETURN))
        public void onGetReturn(@ProbeClassName String pcn,
                        @ProbeMethodName String pmn, @Duration long d,java.util.Map paraMap,java.lang.String url) {
                println(url);
                print("leaving HttpService  ");
                println(Strings.strcat(Strings.strcat(pcn, "."), pmn));
                println(Strings.strcat("Time taken (sec) ", Strings.str(d / 1000000000.0)));
                println("==========================");
        }