java btrace

本文的目的是学习如何使用BTrace动态跟踪/观察正在运行的Java应用程序(JDK 6+),而无需更改应用程序的代码和配置参数。

什么是BTrace?

BTrace是一个开源项目,始于2007年,最初由A.Sundararajan和K.Balasubramanian两人拥有。 由于Java One 2008会议,它获得了名声。

BTrace帮助我们查明应用程序中的复杂代码问题。 使用BTrace可以解决的问题包括代码错误,不可预测的流程,并发问题和性能问题,这些问题是在特定且通常难以重现的情况下发生的。

BTrace以程序员定义的方式动态(无需重新启动应用程序)检测(更改)应用程序的字节码。 工具的目的是查看在代码的特定区域中发生的情况。 如果超出此范围使用,则可能会损害应用程序的流程,因此验证程序禁止该操作。
例如,让我们尝试解决以下问题–重要文件每天偶尔被删除一次。 我们想要找到执行此操作的代码。 因此,如果文件名合适,我们想更改java.io.File的'delete'方法并打印调用线程的堆栈跟踪。 使用BTrace,我们可以通过编写简短的Java代码来做到这一点。

以下架构显示BTrace工作原理。

在Tar​​get 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 +应用程序并运行任何(*)代码

局限性

  • 出于安全考虑,必须与运行跟踪应用程序的用户使用同一用户运行
  • 仅支持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

java btrace

java btrace_BTrace for Java应用程序简介相关推荐

  1. 「小程序JAVA实战」微信小程序简介(一)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-01/ 一直想学习小程序,苦于比较忙,加班比较多没时间,其实这都是理由,很多时候习惯了搬砖,习惯了固 ...

  2. java btrace_BTrace:Java开发人员工具箱中的隐藏宝石

    java btrace 这篇文章是关于BTrace的 ,我正在考虑将其作为Java开发人员的隐藏宝藏. BTrace是用于Java平台的安全,动态跟踪工具. BTrace可用于动态跟踪正在运行的Jav ...

  3. 从Java代码到Java堆理解和优化您的应用程序的内存使用

    从Java代码到Java堆理解和优化您的应用程序的内存使用 简介: 本文将为您提供 Java? 代码内存使用情况的深入见解,包括将 int 值置入一个Integer 对象的内存开销.对象委托的成本和不 ...

  4. Java异常(一) Java异常简介及其架构

    概要 本章对Java中的异常进行介绍.内容包括: Java异常简介 Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.htm ...

  5. java第一章Java语言概述和入门程序

    文章目录 Java课程简介 1.1 Java概述(Java的发展) 1.2 Java 的特点 不依赖平台 1.3 java软件平台安装和配置 java程序开发 含有psvm的是主类 入口 java类默 ...

  6. 小师妹学JVM之:java的字节码byte code简介

    文章目录 简介 Byte Code的作用 查看Byte Code字节码 java Byte Code是怎么工作的 总结 简介 Byte Code也叫做字节码,是连接java源代码和JVM的桥梁,源代码 ...

  7. java 8 stream中的Spliterator简介

    文章目录 简介 tryAdvance trySplit estimateSize characteristics 举个例子 总结 java 8 stream中的Spliterator简介 简介 Spl ...

  8. 定义入栈java_小师妹学JVM之:java的字节码byte code简介

    简介 Byte Code也叫做字节码,是连接java源代码和JVM的桥梁,源代码编译成为字节码,而字节码又被加载进JVM中运行.字节码怎么生成,怎么查看字节码,隐藏在Byte Code背后的秘密是什么 ...

  9. libsvm java 实例_LibSVM Java API调用示例程序

    [实例简介] LibSVM Java API调用示例程序 Eclipse 完整工程可以运行 相关详情见http://blog.csdn.net/yangliuy/article/details/804 ...

最新文章

  1. python函数的定义域_python中多线程的变量定义域问题
  2. hdfs du命令是算的一份数据
  3. vue中子组件向父组件传递数据(实现加减的实例)
  4. filter_var()函数
  5. c语言限制字符数,C语言中“不受限制”的字符串函数总结.pdf
  6. 【SP26073】DIVCNT1 - Counting Divisors 题解
  7. java 使用logback进行日志输出
  8. HTTP劫持 方面了解和学习
  9. Python2.x(3.x)安装及Ulipad的安装和使用
  10. C#上使用Echarts做报表
  11. 接口测试用例生成工具介绍及应用
  12. cmd批量修改文件名 增加文字_如何批量修改文件名称,如何批量修改文件标题
  13. 火车票软件哪个好用_买火车票哪个软件好用 哪个软件买火车票便宜
  14. 庐山石刻分布及实习感想
  15. 软件测试的分类有哪些?
  16. 平面解析几何----余弦定理求焦点三角形的面积
  17. 数据库的应用(概念)
  18. 创客教育中的空间设计实物原理
  19. html 用event.keycode控制只能输入小写字母,event.keyCode键码值表 附只能输入特定的字符串代码...
  20. PyCharm快捷键(替换和查找)

热门文章

  1. Java 8 日期和时间解读
  2. VS2012找不到EF框架实体模型的解决方法
  3. 《四世同堂》金句摘抄(十五)
  4. ssh(Spring+Spring mvc+hibernate)——IDeptService.java和IEmpService.java
  5. Github Pages + Jekyll 独立博客一小时快速搭建上线指南
  6. bean交个spring和new比较区别
  7. java动态代理和cglib动态代理
  8. Unicode® Character Name Index
  9. Nginx 部署 Vue 项目刷新页面出现404
  10. dmn是大脑中哪个区域_DMN中的函数式编程:感觉就像再次重读我的大学课程一样...