• 使用btrace来找出执行慢的方法


    转载于:https://shaojun.name/2016/07/260

    btrace script

    import static com.sun.btrace.BTraceUtils.name;
    import static com.sun.btrace.BTraceUtils.print;
    import static com.sun.btrace.BTraceUtils.println;
    import static com.sun.btrace.BTraceUtils.probeClass;
    import static com.sun.btrace.BTraceUtils.probeMethod;
    import static com.sun.btrace.BTraceUtils.str;
    import static com.sun.btrace.BTraceUtils.strcat;
    import static com.sun.btrace.BTraceUtils.timeMillis;
     
    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.TLS;
     
    @BTrace
    public class MethodTimeCost {
     
        @TLS private static long starttime;
         
        @OnMethod(clazz="/org\..*/", method="/.+/",location=@Location(Kind.ENTRY))
        public static void startExecute() {
            starttime = timeMillis();
        }
         
        @OnMethod(clazz="/org\..*/", method="/.+/",location=@Location(Kind.RETURN))
        public static void endExecute() {
            long timecost = timeMillis() - starttime;
            if(timecost > 50) {
                print(strcat(strcat(name(probeClass()), "."), probeMethod()));
                print("  [");
                print(strcat("Time taken : ", str(timecost)));
                println("]");
            }
        }
    }

    被测试代码:

    package org.shaojun.test;
     
    public class MyTest {
     
        public static void main(String[] args) {
             
             
            for(int i = 0;i < 100; i++) {
                Thread t = new Thread() {
                    @Override
                    public void run() {
                        Slow slow = new Slow();
                        slow.query();
                    }
                };
                t.start();
            }
        }
    }
     
    package org.shaojun.test;
     
    public class Slow {
     
        public void query() {
            while(true) {
                slow();
            }
        }
         
        public void slow() {
            slow2();
        }
         
        public void slow2() {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("helloworld");
        }
    }

    执行以下代码:
    /btrace -cp build 2042 /Users/shaojun/Documents/workspace/btrace/src/MethodTimeCost.java
    其中,2042是被测试代码的java进程id
    /Users/shaojun/Documents/workspace/btrace/src/MethodTimeCost.java是btrace脚本所在位置
    -cp build可以沿用

    以下是btrace下载地址:
    btrace-bin-1.3.7

  • 相关阅读:
    [LeetCode] 617. Merge Two Binary Trees
    [LeetCode] 738. Monotone Increasing Digits
    289. Game of Life
    305. Number of Islands II
    288. Unique Word Abbreviation
    271. Encode and Decode Strings
    393. UTF-8 Validation
    317. Shortest Distance from All Buildings
    286. Walls and Gates
    296. Best Meeting Point
  • 原文地址:https://www.cnblogs.com/zl0372/p/btrace.html
Copyright © 2020-2023  润新知