设为首页 加入收藏

TOP

线上性能检测工具之Btrace(一)
2015-02-02 14:17:04 来源: 作者: 【 】 浏览:23
Tags:性能 检测 工具 Btrace

当系统运行后,有的方法的执行时间让人不满意,需要用一些工具去查看执行的情况,可以考虑使用Btrace,使用还是比较简单的。


1、安装


首先到网上下个Btrace包吧,官方网址是:http://kenai.com/projects/btrace


解压后,把bin目录加入到环境变量中就可以使用了。


2、验证


配置环境变量后,打开一个CMD控制台:


输入命令 btrace:


Microsoft Windows [版本 6.1.7601]


版权所有 (c) 2009 MicrosoftCorporation。保留所有权利。


?


C:\Users\fan>btrace


Usage: btrace


where possible options include:


? -classpath Specifywhere to find user class files and annotation processors


? -cp ? ? ? ? Specify where to find user class filesand annotation processors


? -I ? ? ? ? Specify where to find include files


? -p ? ? ? ? Specify port to which the btrace agentlistens for clients


?


配置就完成了。


3、开发


btrace安装好了,可以到btrace的官方帮助文档中去看语法http://kenai.com/projects/btrace/pages/UserGuide


?


写btrace脚本和一般的java差别不大,只是用了一些annotation来标识某个类是跟踪脚本。btrace用到的jar包基本都在下载的/btrace-bin/build文件下,将这三个包导进工程就可以使用了。【btrace脚本写好后可以不用编译,直接执行.java文件就可以】


?


看一个trace的例子。


package com.btrace;


?


import java.util.Random;


import java.util.Arrays;


/**


?* 简单的Btrace查看的示例,主要是方法的运行时间和内存使用


?* @author 范芳铭


?*/


public class EasyBtraceTest {


? ? ? private Object[] elements;


? ? ? private int size = 0;


? ? ? private static final intDEFAULT_INI_CAPACITY = 16;


? ? ?


? ? ? public byte[] placeHolder =new byte[64 * 1024]; //占位符


? ? ? public EasyBtraceTest(){


? ? ? ? ? ? ? elements = new Object[DEFAULT_INI_CAPACITY];


? ? ? }


? ? ?


? ? ? public static voidmain(String[] args) throws Exception {


? ? ? ? ? ? ? while (true) {


? ? ? ? ? ? ? ? ? ? Random random =new Random();


? ? ? ? ? ? ? ? ? ? execute(random.nextInt(4000));


? ? ? ? ? ? ? }


?


? ? ? }


?


? ? ? public static Integerexecute(int sleepTime) {


? ? ? ? ? ? ? try {


? ? ? ? ? ? ? ? ? ? Thread.sleep(sleepTime);


? ? ? ? ? ? ? ? ? ? if (sleepTime %2 == 0){


? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("正在执行");


? ? ? ? ? ? ? ? ? ? ? ? ? ? EasyBtraceTesttest = new EasyBtraceTest();


? ? ? ? ? ? ? ? ? ? ? ? ? ? test.push(test);


? ? ? ? ? ? ? ? ? ? }


? ? ? ? ? ? ? } catch (Exception e) {


? ? ? ? ? ? ? }


? ? ? ? ? ? ? System.out.println("sleeptime is=>" + sleepTime);


? ? ? ? ? ? ? return 0;


? ? ? }


? ? ?


? ? ? //用于占用内存


? ? ? public void push(Object e){


? ? ? ? ? ? ? if (elements.length ==size )


? ? ? ? ? ? ? ? ? ? elements=Arrays.copyOf(elements, 2 * size + 1 );


? ? ? ? ? ? ? elements[size++] = e;


? ? ? }


}


4、btrace脚本


我要监控execute方法执行的时间,以及使用的内存的情况


?


?btrace脚本如下:


package com.btrace;


?


import static com.sun.btrace.BTraceUtils.println;?


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.BTraceUtils.Sys;


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.OnTimer;


import com.sun.btrace.annotations.ProbeClassName;?


import com.sun.btrace.annotations.ProbeMethodName;?


import com.sun.btrace.annotations.TLS;


@BTrace?


public class TraceEasyBtrace {?


? ? ?


? ? @TLS?


? ? private static long startTime =0;?


? ? ?


? ? @OnMethod(clazz ="com.btrace.EasyBtraceTest", method = "execute")?


? ? public static voidstartMethod(){?


? ? ? ? startTime =timeMillis();?


? ? }?


? ? ?


? ? @OnMethod(clazz ="com.btrace.EasyBtraceTest", method = "execute", location =@Location(Kind.RETURN))?


? ? public static voidendMethod(){?


? ? ? ? println(strcat("theclass method execute time=>", str(timeMillis()-startTime)));?


? ? ? println("-------------------------------------------");?


? ? }?


? ? ?


? ? @OnMethod(clazz ="com.btrace.EasyBtraceTest", method = "e

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java垃圾收集器之Serial收集器 下一篇Android启动Activity前确定Intent..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: