BTrace for Java应用程序简介
什么是BTrace?
BTrace是一个开源项目,始于2007年,最初由A.Sundararajan和K.Balasubramanian两人拥有。 由于Java One 2008会议,它获得了名声。
BTrace帮助我们查明应用程序中的复杂代码问题。 使用BTrace可以解决的问题包括代码错误,不可预测的流程,并发问题和在特定的且通常难以重现的情况下发生的性能问题。
BTrace以程序员定义的方式动态地(无需重新启动应用程序)检测(更改)应用程序的字节码。 工具的目的是查看在代码的特定区域中发生的情况。 如果超出此范围使用,则可能会损害应用程序的流程,因此验证程序禁止该操作。
例如,让我们尝试解决以下问题–重要文件每天偶尔被删除一次。 我们想要找到执行此操作的代码。 因此,我们想更改java.io.File的'delete'方法并在文件名合适的情况下打印调用线程的堆栈跟踪。 使用BTrace,我们可以通过编写简短的Java代码来做到这一点。
以下架构显示BTrace工作原理。
在Target JVM中,有一个动态插入的BTrace代理(使用attach API )。 BTrace客户端(BTrace命令行或具有BTrace插件的Visual VM)将命令发送到代理并获取响应。 BTrace代理会检测正在加载到目标JVM中的类,并重新加载已经加载的类。
编写跟踪脚本
编写BTrace脚本非常简单明了,其概念类似于面向方面的编程概念。
import com.sun.btrace.annotations.*;
import com.sun.btrace.BTraceUtils;@BTrace
public class HelloWorld {@OnMethod(clazz="java.io.File",method="")
public static void onNewFileCreated(String fileName) {BTraceUtils.println("New file is being created");BTraceUtils.println(fileName);
}
每个BTrace脚本均由探针(Aspects lang语中的切入点)和操作(建议)组成。 探针定义何时应执行检测。 动作定义了检测。
探针可以包括以下内容:
- 方法进入/退出
- 电话号码
- 字段已更新/已访问
- 方法调用/返回(在指定方法内)
- 异常抛出(之前)
- 同步进入/退出
- 计时器
- 构造器入口
BTrace的能力和局限性
能力
- 动态连接到任何Java6 +应用程序并运行any(*)代码
局限性
- 出于安全考虑,必须与运行跟踪应用程序的用户使用同一用户运行
- 仅支持Hotspot JVM
- 与目标应用程序分开编译–不熟悉应用程序类
- 可能会破坏目标应用程序–我在寿命很长的设置上运行了BTrace,该设置包含很多跟踪脚本。 目标应用程序甚至没有崩溃过。
先进的BTrace
BTrace社区实际上由一个定期在项目上工作的开发人员组成。 因此,不要期望在接下来的版本中有太多的改进和许多新功能。 (这是一个为项目做出贡献的好机会,因为每个开发人员都会显着增强开发水平)。
该项目的文档应该得到显着改进–我发现自己在将这个框架集成到我现有的框架中时曾多次猜测。 BTrace论坛是获取有关框架答案的好方法。
为了理解BTrace的魔力是如何工作的,需要三个领域的知识-“ Java代理开发”,“ java中的字节码操作”和“ Java附加api”。 将来我可能会写一些这些领域。
相关链接
http://www.parleys.com/#st=5&id=1618&sl=1
http://kenai.com/projects/btrace
参考: The Art of Java博客的JCG合作伙伴 Art Gourevitch 对BTrace的介绍 。
翻译自: https://www.javacodegeeks.com/2012/06/introduction-to-btrace-for-java.html
BTrace for Java应用程序简介相关推荐
- java btrace_BTrace for Java应用程序简介
java btrace 本文的目的是学习如何使用BTrace动态跟踪/观察正在运行的Java应用程序(JDK 6+),而无需更改应用程序的代码和配置参数. 什么是BTrace? BTrace是一个开源 ...
- 黑马程序员--Java学习01--java简介
---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.Java的诞生 Java是1995年6月由 ...
- 《Java Web程序设计基础教程》简介
本书是关于Java Web开发的基础教程,共分15章.第1章介绍如何构建Java Web应用:第2.3章介绍如何解决Java Web应用的输入和输出问题:第4-6章对登录功能进行了3次重构,这也是Ja ...
- 双表查询java代码_什么是JDBC?Java数据库连接性简介
JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集.JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批 ...
- [Google API](8)构建使用Google API的Java应用程序
Google 搜索引擎建立起了通过 Web 服务接口可用的索引.拼写建议和缓存页面,从而允许所有语言的程序员都能就个人使用存取信息.Google 搜索引擎还提供了 Java API,从而存取数据更为便 ...
- 利用btrace在线监控java程序状态
2019独角兽企业重金招聘Python工程师标准>>> 利用btrace在线监控java程序状态 btrace介绍 下载地址: https://kenai.com/projects/ ...
- java 设计模式_快速上手Java设计模式之简介
阅读本文约需要5分钟 大家好,我是你们的导师,经常看我朋友圈的同学应该知道,我每天会在微信上给大家免费提供以下服务! 1.长期为你提供最优质的学习资源! 2.给你解决技术问题! 3.每天在朋友圈里分享 ...
- java.util.concurrent简介
文章目录 主要的组件 Executor ExecutorService ScheduledExecutorService Future CountDownLatch CyclicBarrier Sem ...
- Java GC系列(1):Java垃圾回收简介
转载自 Java GC系列(1):Java垃圾回收简介 这篇教程是系列第一部分.首先会解释基本的术语,比如JDK.JVM.JRE和HotSpotVM.接着会介绍JVM结构和Java 堆内存结构.理解 ...
最新文章
- Python实现微信防撤回
- 杀死进程和apk的安装
- Connection reset by peer原理解析
- hikari如何切换数据源_hikari数据库连接池
- php 文档转html格式文件,php学习笔记之将word文档转化为HTML文件
- WP之Sql Server CE数据库
- 2021当一名优雅的代码打工人
- factorybean 代理类不能按照类型注入_快速理解Spring中的FactoryBean接口
- 网上图书商城项目学习笔记-034订单管理
- react 打包体积过大_解决 webpack 打包文件体积过大
- idea:java注释模板配置
- loj507(dp)
- 小米手机Root 刷机
- 用.NET做动态域名解析
- 百果园APP产品迭代
- babylonjs 分部加载模型_基于Babylonjs自制WebGL3D模型编辑器
- c语言大一课程设计,大一课程设计(C语言).doc
- 【电子通识】为什么IC需要自己的去耦电容?
- 【行业案例】域乎科技:“数”写长三角一体化的加速度——域乎科技链接未来,做数字时代的奠基人(智慧上海2020总第24篇)
- Exynos_4412——IIC总线概述