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

  • 相关阅读:
    物料描述不可更新(分配组织后)
    完工任务不允许更改需求
    作业需求更改,限制车间人员只允许修改子库
    只允许更改**类型的任务需求
    车间任务移动完工时检验倒冲子库
    有库存不能停用子库存
    不允许修改标准作业需求
    PHP关于重写与重载
    面向对象的三个基本特征 封装 继承 多态
    PHP中的面向对象 中的类(class)
  • 原文地址:https://www.cnblogs.com/zl0372/p/btrace.html
Copyright © 2011-2022 走看看