Btrace是由Kenai开发的一个开源项目,是一种动态跟踪分析JAVA源代码的工具。它使用OjbectWeb
ASM组件来完成字节码层面上的跟踪分析,帮助我们对运行时的JAVA程序分析,监控等操作
优点:
》无侵入性(只查看,不会修改)
》不修改应用任何应用数据
》限制跟踪行为,没能有循环
一、 Btrace 原理:
本地编写跟踪类,由Btrace 命令行执行即可。
1、本地编译跟踪类。
2、attach远程JVM PID,将class传过去。
3、通过脚本引擎及asm动态变更JVM中的字节码,将跟踪代码嵌入。
4、代码触发后,将结果返回本地输出。
二、安装步骤
1、首先下载Btrace包。我下载的是最新版本1.2.2,下载地址:http://kenai.com/projects/btrace/downloads/directory/releases/release-1.2.2
有多个版本供你选择(window、Linux 、MacOS)。本文以windows为例。
下载后得到的是一个btrace-bin.zip 压缩包。将其解压(注:目录里面最好不要有空格)
2、配置环境变量
在环境变量中配置BTRACE_HOME。在PATH中添加BIN目录的路径
BTRACE_HOME =D:\software\btrace-bin
path=$path$;D:\software\btrace-bin\bin
三、使用步骤
1、运行要测试的web程序,或者是运行java程序的 main函数
2、用jps获取当前进程pid
3、运行监控脚本,查看特定类的运行状况。
命令格式:btrace <pid> 脚本程序.java,
四、例子
1.、业务代码
Count.java
package test.btrace;
/**
* 类Counter.java的实现描述:TODO 类实现描述
*
* @author onlyone 2012-11-3 下午12:33:56
*/
public class Counter {
// 总数
private static int totalCount = 0;
public int add(int num) throws Exception {
totalCount += num;
return totalCount;
}
public int getNum() {
return totalCount;
}
}
CountMainTest.java
package test.btrace;
import java.util.Random;
/**
* 类CountMainTest.java的实现描述:TODO 类实现描述
*
* @author onlyone 2012-11-3 下午12:34:35
*/
public class CountMainTest {
public static void main(String[] args) throws Exception {
Random random = new Random();
// 计数器
Counter counter = new Counter();
while (true) {
// 每次增加随机值
counter.add(random.nextInt(100));
System.out.println(counter.getNum());
System.out.println("--------------------------");
Thread.sleep(1000);
}
}
}
2、btrace脚本
package test.btrace;
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
/**
* 类TraceTest.java的实现描述:TODO 类实现描述
*
* @author onlyone 2012-11-3 下午12:35:28
*/
@BTrace
public class TraceTest {
@TLS
private static long startTime = 0;
/**
* 开始时间
*/
@OnMethod(clazz = "test.btrace.Counter", method = "add")
public static void startMethod() {
startTime = timeMillis();
}
/**
* 结束时间
*/
@OnMethod(clazz = "test.btrace.Counter", method = "add", location = @Location(Kind.RETURN))
public static void endMethod() {
println(strcat("the class method execute time=>", str(timeMillis() - startTime)));
println("-------------------------------------------");
}
/**
* 跟踪方法执行过程
*
* @param num
* @param result
*/
@OnMethod(clazz = "test.btrace.Counter", method = "add", location = @Location(Kind.RETURN))
public static void traceExecute(int num, @Return int result) {
println(strcat("parameter num: ", str(num)));
println(strcat("return value:", str(result)));
}
}
3.首先运行业务类,CountMainTest.java
然后进入btrace脚本类目录D:\alibaba\application\work\memcached\src\test\btrace,执行脚本命令
控制台输出:
源代码:https://mymemcached-cookie.googlecode.com/svn/trunk
参考资料:http://mgoann.iteye.com/blog/1409667
分享到:
相关推荐
《PLC综合开发利器——CoDeSys基础编程及应用指南》
项目管理利器——maven,技术开发学习类稳定档案顶顶顶顶
普通人的编辑利器——VIM_(for_windows)
前端框架利器——bootstrap
本软件适用于发布资源,不但能防伸手党、搬运党(特别是几G的资源);还能避免没人回帖的尴尬 (o゜▽゜)o☆ 加密端使用方法: 1、先把文件打包为带密码的rar压缩包,然后把压缩包和解密端一起发给别人(把解密...
FTP利器——FileZilla,FileZilla_3.13.1_win64-setup.exe
你还在为各种意想不到的状况烦恼吗?不知如何去及时了解jvm的运行情况吗?java线程、内存使用情况等都可以通过Btrace进行跟踪分析,了解系统运行情况,方便易用!
深度学习利器——Tensorflow程序设计 ,深度学习框架tensorflow入门
《Java开发利器——Hibernate 开发及整合应用大全》一书源代码第一部分,共4部分。分享有给需要的朋友!
吃鸡好利器——游戏路由器导购.pdf
Arduino的模拟仿真利器——Virtual_Breadboard
Arduino的模拟仿真利器——VirtualBreadboard.doc
现代软件开发的格局发生了变化,构建自动化成为大势所趋。本文介绍一个Java项目构建的新型利器——Gradle。
Java开发利器——Hibernate 开发及整合应用大全.zip.004
Oracle数据库备份和恢复利器——RMAN.pdf
共享宽带网络的利器——Asante路由器.pdf
Linux下ISO文件制作利器——KIso.pdf
迁移数据上云的利器——Amazon Snowball
介绍未名学术搜索的一款PPT,作者是北京大学丁艳君,日期为20151023。