BTrace试用

说明:

BTrace是Java进程诊断分析工具,优点是无侵入性,跟踪时对原有应用无干扰,不需要重启应用。

 项目主页:https://kenai.com/projects/btrace

实验过程:
1、环境说明:    
    操作系统:windows 7
    JDK版本:1.6
      BTrace 版本:1.24
     BTrace安装路径:c:\temp\btrace
    Eclipse Java测试工程目录: E:\bi\projects\tezz
 

    提前设置好JAVA_HOME与BTRACE_HOME

    JAVA_HOME= E:\jdk1.6.0_10
    BTRACE_HOME=e:\temp\btrace
     在path环境变量中增加 % JAVA_HOME%\bin;% BTRACE_HOME%\bin 内容
 
2、实验步骤:
1)开发demo.btrace.HelloWorld.java
package demo.btrace;
import java.util.Random;
public class HelloWorld {
    public static void main(String[] args) throws Exception {
        //CaseObject object = new CaseObject();
        while (true) {
            Random random = new Random();
            execute(random.nextInt(4000)); 
        }
    }
    public static Integer execute(int sleepTime) {
        try {
            Thread.sleep(sleepTime);
        } catch (Exception e) {
        }
        System.out.println("sleep time is=>"+sleepTime);
        return 0;
    }
}    
2)编写Trace程序:
package demo.btrace;
import ...
@BTrace
public class TraceHelloWorld {
    @TLS
    private static long startTime = 0;
 
    @OnMethod(clazz = "demo.btrace.HelloWorld", method = "execute")
    public static void startMethod(){
        startTime = timeMillis();
    }
 
    @OnMethod(clazz = "demo.btrace.HelloWorld", method = "execute", location = @Location(Kind.RETURN))
    public static void endMethod(){
        println(strcat("the class method execute time=>", str(timeMillis()-startTime)));
        println("-------------------------------------------");
    }
 
    @OnMethod(clazz = "demo.btrace.HelloWorld", method = "execute", location = @Location(Kind.RETURN))
    public static void traceExecute(@ProbeClassName String name,@ProbeMethodName String method,int sleepTime){
        println(strcat("the class name=>", name));
        println(strcat("the class method=>", method));
        println(strcat("the class method params=>", str(sleepTime)));
    }
}
3)eclipse环境,运行HelloWorld程序。
4)dos环境,切换到 E:\bi\projects\tezz\src目录,执行jps命令,查看HelloWorld的pid为21440。
5)dos环境,切换到E:\bi\projects\tezz\src\demo\btrace目录,执行如下命令:
    >btrace.bat 21440 TraceHelloWorld.java
    能否查看到执行的结果。
 
3、注意事项:
1)本机最初采用jdk1.8版本,实验表明不兼容,需降到JDK 1.6版本,其他版本兼容性未做测试。
2)修改了btrace.bat,内容如下,注意标红部分,目的是增加将eclipse工程中引用的jar包:
@echo off
set LIBPATH=E:\bi\projects\tezz\WebRoot\WEB-INF\lib
set CP=.
for /f %%i in ('dir /b/s/o %LIBPATH%\*.jar') do CALL :addpath %%i
 
rem %~dp0 is expanded pathname of the current script under NT
set DEFAULT_BTRACE_HOME=%~dp0..
 
if "%BTRACE_HOME%"=="" set BTRACE_HOME=%DEFAULT_BTRACE_HOME%
set DEFAULT_BTRACE_HOME=
 
if not exist "%BTRACE_HOME%\build\btrace-client.jar" goto noBTraceHome
 
@echo on
if "%JAVA_HOME%" == "" goto noJavaHome
  "%JAVA_HOME%/bin/java" -Dcom.sun.btrace.probeDescPath=. -Dcom.sun.btrace.dumpClasses=false -Dcom.sun.btrace.debug=false -Dcom.sun.btrace.unsafe=false -cp " %CP%; %BTRACE_HOME%/build/btrace-client.jar;%JAVA_HOME%/lib/tools.jar" com.sun.btrace.client.Main %*
  goto end
 
:noJavaHome
  echo Please set JAVA_HOME before running this script
  goto end
 
:noBTraceHome
  echo Please set BTRACE_HOME before running this script
 
:addpath
SET CP=%CP%;%1
GOTO :EOF
 
:end

猜你喜欢

转载自jackiee-cn.iteye.com/blog/2286869