`
iamzhongyong
  • 浏览: 796486 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Btrace中的几个关键技术

 
阅读更多

        使用Btrace已经一段时间了,对于原理一直处于比较模糊的状态,最近有时间来进一步看代码,所以打算写一下。

        类似Btrace的工具目前不少,例如housemd,以及很多基于Btrace的扩展。本来考虑搞一个源码分析的,但是发现没那么多经历,万变不离其宗,还是看一下基本的原理吧。

        1、JDK6中的Instrucment (java扩展组件)

        这个似乎JDK5之后提供的一个组件,能够修改Class的信息,但是JDK5的时候需要在进程中添加agent的信息,这样就导致了不是很灵活。无法再不停机的情况下来进行动态的变化。于是JDK6中,通过attach api来是实现了动态添加,无需修改java进程,即可完成操作。

 

        2、Attach API (虚拟机动态连接)

        Attach API 不是 Java 的标准 API,而是 Sun 公司提供的一套扩展 API,用来向目标 JVM ”附着”(Attach)代理工具程序的。有了它,开发者可以方便的监控一个 JVM,运行一个外加的代理程序。 

        Sun JVM Attach API功能上非常简单,仅提供了如下几个功能:

            1、列出当前所有的JVM实例描述

            2、Attach到其中一个JVM上,建立通信管道

            3、让目标JVM加载Agent

 

        3、ASM(字节码处理框架)

        中间有了组件,能够修改字节码文件,但是这个字节码文件谁来修改?如果懂得java的byteCode规则,完全可以自己玩,但是很多人是不懂的。ASM是字节码修改的一个框架,提供了公共的方法来修改字节码,开发人员关注自己的业务逻辑即可。cglib的字节码变化就是使用了ASM这个框架。

 

        4、Annotation(java 注解)

        注解是jdk5之后提供的一个功能,非常方便,BTrace的话,为了减少脚本的编写成本,封装了注解,这样的话,btrace内部来处理注解的逻辑,然后如果使用功能,直接添加一个注解就OK了。

 

            总体流程:

            1、编写Btrace脚本(就是写java代码),使用了其提供的注解,方便快捷;

            2、使用Attach API来连接目标的java进程,运行脚本;

            3、连接了java进程后,装载agent,然后agent里面来通过Instrucment来修改字节码;

            4、字节码的处理,使用了ASM框架;

            这些功能是零散的,Btrace以及其他的工具,是对于这些功能的组合,赞一下当初作者的思路。对于java应用来说,对于系统弱侵入或者不侵入就可以做一些事情,似乎我们非常高兴的。

        

            参考文章:

            https://kenai.com/projects/btrace/sources/hg/show

            http://www.iteye.com/topic/1005918

    ​    ​    ​http://www.infoq.com/cn/article s/java-profiling-with-open-source

 

    ​    ​    ​​http://kenwublog.com/btrace-theory-analysis 

 

0
2
分享到:
评论
1 楼 ivan19861025 2015-09-07  
如果是.java, 还有个编译的功能

相关推荐

    btrace release-1.2.5.1

    btrace btrace btrace btrace

    btrace扩展功能工具

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

    btrace工具

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

    BTrace-一个用于Java平台的安全动态的跟踪工具

    BTrace可用于动态跟踪正在运行的Java程序(类似于DTrace for OpenSolaris应用程序)。 BTrace动态地测试目标应用程序的类以注入跟踪代码(“字节代码跟踪”)。

    btrace1.3.9

    btrace1.3.9最新版本转过来

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

    linux和windows通用,1.3.11版本。btrace-bin直接解压缩配置环境变量后即可运行使用。 java监控调试工具虚拟机监控程序,利用BTrace...BTrace将跟踪操作插入到正在运行的Java程序的类中,并对跟踪的程序类进行热交换。

    btrace1.3.9.zip

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

    btrace api 1.2.chm

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

    jdk1.8-Btrace.rar

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

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

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

    btrace安装包

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

    btrace workbench

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

    Btrace 官方zip包

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

    btrace-release-1.3.11.3.zip

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

    btrace调试工具

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

    BTrace的安装包Windows

    BTrace

    jvisualvm btrace插件离线安装

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

    btrace_extend-master

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

    jvisualvm-btrace离线安装包

    jvisualvm-btrace离线安装包。 jvisualvm btrace插件离线安装包1.2.85版本,目前官网不支持国内在线下载。 含相关依赖包:...安装时点工具-插件-已下载,点添加插件一次性将4个插件都添加进去,再点安装即可。

    BTrace自我总结测试代码

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

Global site tag (gtag.js) - Google Analytics