`
sw1982
  • 浏览: 504434 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

BTrace~精确的profile

阅读更多

偶然间从一个blog上看到这个项目,于是就花时间看了看,真的值得一试.

 

优点比较明显,总结了几个自己适用的:

 

1.直接使用,无需重启需要监听的进程。

    下载btrace,解压,写监控类, 然后获取需要监控程序的pid进程号,运行bin/btrace <pid> HelloWorld.java ,就这么简单一气呵成。     即时启用,即时关闭。

e.g(每次进程start()都会打印一条消息)

 

import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;

// @BTrace annotation tells that this is a BTrace program 
@BTrace
class HelloWorld {
   @OnMethod(
        clazz="java.lang.Thread",
        method="start"
)
void func() {
     sharedMethod("msg start Thread");
}

void sharedMethod(String msg) {
     println(msg);
}}

 

 

2.对现有程序的性能干扰不大!!

首先是基于字节码的技术,这个很多框架,包括自己都能够实现。但是,Btrace的精髓还在于,使用c++的模式实现了一些更高效的Util方法,比如: 计时的timeMillis, 字符串函数 strcat,

 

println(strcat("VerifyInterceptor Timetaken(msec) ", str(timeMillis() - startTime)))

 

 

另外,在btrace的监控代码里面,严格限制了任何干扰监控对象程序的java代码。比如创建新对象、抛异常,捕获异常,甚至是使用System.currentTimeMillis()这样的java计时函数都是不可以的。

 

3.切面灵活

厌倦了检测整个函数的执行时间么?(必须的,因为函数会有嵌套调用关系,有时候只期望能检测函数的某一段代码执行时间)

 

那么下面这个例子就比较爽了: 检测VerifyInterceptor.intercept()函数开始,到代码的262行(也就是intercept函数中的某一处),执行时间。

 

// import BTrace annotations
import com.sun.btrace.annotations.*;
// import logging methods
import static com.sun.btrace.BTraceUtils.*;

@BTrace public class Tracker {
@TLS private static long startTime;
@OnMethod(
clazz="com.xxr.VerifyInterceptor",
method="intercept"
)
public static void onbefore() {
startTime = timeMillis();
}
@OnMethod(
clazz="com.xxr.VerifyInterceptor",
method="intercept",
//location=@Location(Kind.RETURN) 
location=@Location(value=Kind.LINE, line=262)
)
public static void onreturn() {
println(strcat("VerifyInterceptor Timetaken(msec) ", str(timeMillis() - startTime)));
//println("==========================");
}
}

 

 

btrace还可以做很多事情,比如监控Annotation,做定时器的检测,输出jstack,jmap.mem,乃至socket,以及将自己暴露成一个JMX bean,远程管理。

分享到:
评论
1 楼 beneo 2010-11-25  
BTrace是非常赞的非常赞的,貌似目前最好的profile

相关推荐

    btrace release-1.2.5.1

    btrace btrace btrace btrace

    btrace扩展功能工具

    1.btrace扩展是在btrace已由功能上进行的扩展,原有功能和使用方式依然没变。目前版本扩展了两个功能:接口时间监控和接口时间调用树监控。扩展之后的btrace功能使用时都不需要写btrace脚本。 2.使用接口时间监控...

    BTrace安装包 btrace-bin-1.3.11.3.zip + btrace-src-1.3.11.3.zip

    btrace-bin直接解压缩配置环境变量后即可运行使用。 java监控调试工具虚拟机监控程序,利用BTrace可以在线监控java程序状态。 BTrace是一种安全,动态的Java跟踪工具。BTrace通过动态(字节码)检测正在运行的Java...

    btrace工具

    Btrace:java性能调优及问题追踪工具 Btrace:java性能调优及问题追踪工具

    jdk1.8-Btrace.rar

    java 在线检测插件Btrace, 无需重启服务,即可在线定位问题

    btrace1.3.9.zip

    btrace1.3.9 jdk1.8 maven 编译构建 http://github.com/btraceio/btrace

    btrace1.3.9

    btrace1.3.9最新版本转过来

    BTrace监控远程服务器使用实例

    自己做的BTrace监控,Linux服务器上的tomcat工程,压缩包包含BTrace开发所需的jar包 BTrace简单示例代码 jvisualvm.exe如果远程服务器监控JVM虚拟机信息

    btrace安装包

    btrace安装包,linux和windows通用,1.3.9版本。可以直接解压缩配置环境变量后运行使用

    Btrace 官方zip包

    Btrace用来做项目检测,访问过的类方法统计,无侵略性,JDK1.6

    btrace api 1.2.chm

    btrace api 1.2 文档,从网上扒下来自己做的,其他地方貌似都没有chm,提供给大家使用 btrace是一个跟踪、监控java程序的小工具,能够在不改变源代码的情况下监控很多东西,比如:方法运行时间、输入输出参数、抛出...

    jvisualvm btrace插件离线安装

    jvisualvm btrace插件离线安装,如果jvisualvm不能安装btrace,则可进行离线安装。 这里收集了安装btrace所需要的依赖包,直接添加 即可安装

    btrace支持jdk1.6上运行的版本

    btrace支持jdk1.6上运行的版本,欢迎下载交流~

    btrace-release-1.3.11.3.zip

    Btrace Java 发布版本,Java 虚拟机监控程序

    jvisualvm-btrace离线安装包

    jvisualvm-btrace离线安装包。 jvisualvm btrace插件离线安装包1.2.85版本,目前官网不支持国内在线下载。 含相关依赖包:jsyntaxpane-lib.nbm、net-java-btrace-api.nbm、net-java-btrace-visualvm.nbm、...

    btrace workbench

    btrace workbench 插件jar包打包下载,jvisualvm的插件

    btrace调试工具

    BTrace通过动态(字节码)检测类运行Java程序。BTrace插入跟踪行动运行Java程序的类和hotswaps跟踪程序类。 因此,也就成为我们线上跟踪生产代码的有力工具!

    btrace_extend-master

    btrace_extend-master,解压后上传至服务器即可以使用btrace命令

    BTrace自我总结测试代码

    BTrace自我学习测试代码总结,包含List对象参数,自定义对象的参数的监控。

    BTrace的安装包Windows

    BTrace

Global site tag (gtag.js) - Google Analytics