`
iamzhongyong
  • 浏览: 809725 次
  • 性别: 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源代码

    BTrace的源代码主要分为以下几个关键部分: 1. **BTrace Agent**:这是BTrace的核心组件,它是一个Java代理,可以在运行时加载到目标应用上。BTrace Agent使用Java代理API(java.lang.instrument)来实现字节码级别...

    BTrace测试

    BTrace的全称是"Berkeley Trace",它基于字节码注入技术,可以实时地、安全地在运行中的Java应用程序上添加监控脚本,帮助我们理解程序的运行状态,定位问题,优化性能。 BTrace的工作原理主要是通过ASM库来动态...

    btrace.jar

    btrace的工作原理基于Java代理(Java Agent)技术,它可以通过字节码注入的方式,在运行时对目标Java应用进行监控。开发者可以编写BTrace脚本,这些脚本类似于简单的Java代码,用来定义需要监控的事件或行为。一旦...

    BTrace的安装包Windows

    在Windows上安装BTrace,通常包括以下几个步骤: 1. **下载BTrace**: 你可以从BTrace的官方网站或者其他可信的开源仓库下载适用于Windows系统的BTrace安装包。 2. **解压文件**: 将下载的压缩包解压到一个合适的...

    jvm-anatomy-park-complete

    在文章中还提到了如何编写简单的基准测试,这是了解和诊断JVM性能问题的一个关键步骤。编写基准测试时需要注意几个重要技巧。例如,禁用偏向锁定(Biased Locking)是测试中常见的一步。偏向锁定是Hotspot虚拟机中的...

    jvm-demo1.zip

    在实际调优过程中,我们还需要关注以下几个关键点: - **垃圾收集器的选择与配置**:不同的垃圾收集器有不同的性能特征,选择合适的垃圾收集器并进行合理配置,可以有效提升系统性能。例如,CMS(Concurrent Mark ...

    Java内存管理问题案例分享_技术大学.pdf

    首先,我们来了解Java内存的几个关键区域。Java运行时数据区分为几个部分,包括堆(Heap)、栈(Stack)、本地方法栈(Native Method Stack)、程序计数器(Program Counter)和方法区(Method Area)。栈包含了局部...

Global site tag (gtag.js) - Google Analytics