zoukankan      html  css  js  c++  java
  • 使用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

  • 相关阅读:
    174. Dungeon Game
    240. Search a 2D Matrix II
    300. Longest Increasing Subsequence
    test markdown style
    多源多汇费用流——poj2516
    费用流消圈算法(构造残量网络)
    费用流模板(带权二分图匹配)——hdu1533
    最大流模板——进阶指南整理
    最大流任务调度+离散化——hdu2883
    最大流拆点——hdu2732,poj3436
  • 原文地址:https://www.cnblogs.com/zl0372/p/btrace.html
Copyright © 2011-2022 走看看