java btrace_BTrace for Java应用程序简介

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我的世界javamod怎么装_「装修细节」除了中央空调外的高颜值装空调大法

一直觉得中央空调是高颜值神器但是对于我这种万年单身狗在考虑开启率的情况下好像还是风管机和挂机比较实用但是又嫌弃挂机的电线冷凝水管丑到不行直到我看到了-----管线背出的挂机仿佛开启了新世界的大门| 怎么做到的 |我问了好多卖中央空调的有没有管线背出的挂机都和我说不清…

rm删除文件显示:Operation not permitted

当需要删除某个文件夹或者文件时,提示Operation not permitted,表示不允许操作。 解决方法如图 chattr -i .user.ini 注释: rm -rf 目录名字 :删除 -r 就是向下递归,不管有多少级目录,一并删除 -f 就是直…

sublime 代码格式化

插件: SublimeAStyleFormatter Package Control Messages SublimeAStyleFormatter---------------------- SublimeAStyleFormatter SublimeAStyleFormatter is a simple code formatter plugin for Sublime Text 2. It provides ability to format C, C, C#, and J…

Linux下安装并使用MySQL数据库

注意:如果是配合python使用的话,连接数据库的时候注意python2使用的是mysqldb,python3使用的是pymysql。详细看第三点。 一,首先设置安全组 开放MySQL的默认端口3306 二,安装MySQL服务 在官网查找最新版本的下载链…

Windows下安装并使用MySQL数据库

MySQL是一款免费开源的关系型数据库,很多中小型企业开发项目都选择使用MySQL数据库,所以大家也在优先选择学习MySQL数据库。 一,安装 1.打开MySQL下载地址,MySQL官方下载地址https://dev.mysql.com/downloads/mysql/。 2.选择自…

您的第一个Lagom服务– Java Microservices入门

在撰写我的下一份OReilly报告时,我一直很沮丧,而且一段时间内没有足够的时间来撰写博客。 是时候赶快来这里,让您真正快速地开始使用名为Lagom的新微服务框架。 它与您从Java EE或其他应用程序框架中可能了解到的有所不同。 这对您来说是学习…

转先验概率、最大似然估计、贝叶斯估计、最大后验概率

最大似然估计: 最大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”。简单而言,假设我们要统计全国人口的身高,首先假设这个身高服从服从正态分布,但是该分布的均…

osgi 模块化_OSGi案例研究:模块化vert.x

osgi 模块化OSGi使Java代码可以清晰地划分为多个模块,这些模块称为捆绑软件 ,可以访问由每个捆绑软件的类加载器控制的代码和资源。 OSGi 服务提供了一种附加的分离机制:接口的用户无需依赖于实现类,工厂等。 以下案例研究旨在使O…

第三场阴影场与属性访问器接口

这是“ 影子字段与属性访问器”界面的 第3轮 。 如果您是新手,但不确定要怎么做,请查看我以前的文章或关于开发JavaFX应用程序时节省内存的第一篇文章 。 作为Java开发人员,我主要关心的是在开发JavaFX域模型时在性能 , 内存使用和…

移动端布局三种视口_前端基础:必须要知道的移动端适配(4)——视口

视口(viewport)代表当前可见的计算机图形区域。在Web浏览器术语中,通常与浏览器窗口相同,但不包括浏览器的UI, 菜单栏等——即指你正在浏览的文档的那一部分。一般我们所说的视口共包括三种:布局视口、视觉视口和理想视口&#xf…

平安性格测试题及答案_面试要求做性格测试,该怎么做?

为了筛选到更符合岗位,许多企业在招聘时都选择了“性格测试”。比如,像“华为、宝洁、阿里”等这样的大厂,据说每年都有不少人因为性格测试而凉凉,性格测试真有决定你“生死”的作用吗?那么,在做测试题的时…

CSS行内元素和块级元素的水平居中,垂直居中,水平垂直居中实现

常用内联元素:a,img,input,lable,select,span,textarea,font 常用的块级元素:div,p,table,form,h1,h2,h3,h4,h5,h6,dl,ol,ul,li 一、水平居中 行内元素居中: text-align:center 图片,单个块级元素居中:margin-left和…

mysql scrapy 重复数据_大数据python(scrapy)爬虫爬取招聘网站数据并存入mysql后分析...

基于Scrapy的爬虫爬取腾讯招聘网站岗位数据视频(见本头条号视频)根据TIOBE语言排行榜更新的最新程序语言使用排行榜显示,python位居第三,同比增加2.39%,为什么会越来越火,越来越受欢迎呢,背后折射出的是人工智能、机器…

如何在几分钟内安装Red Hat Container Development Kit(CDK)

作为负责开发容器化应用程序提供的可能性的应用程序开发人员或架构师,将所有工具集中在一起以使您入门时几乎没有帮助。 到现在。 红帽容器开发套件(CDK) 安装变得简单! 红帽提供了一个容器开发套件(CDK&#xff0…

enum 定义3个属性_和平精英:合金龙骨有3个隐藏属性,比玛莎“水下无敌”还唬人...

欢迎诸位小伙伴们来到天哥开讲的《和平精英》“精英那点事儿”~接下来呢,咱们聊聊合金龙骨的3个隐藏属性、土豪玩家“自投罗网”以及游戏里的“公主病患者”等有趣的玩家游戏经历与发现~得,废话不多说了,还是各位小伙伴们熟悉的“老配方”&am…

java中缓冲区和缓存_Java中的Google协议缓冲区

java中缓冲区和缓存总览 协议缓冲区是一种用于结构化数据的开源编码机制。 它是由Google开发的,旨在实现语言/平台中立且可扩展。 在本文中,我的目的是介绍Java平台上下文中协议缓冲区的基本用法。 Protobuff比XML更快,更简单,并…

三十七 Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中...

Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中,判断URL是否重复 布隆过滤器(Bloom Filter)详解 基本概念 如果想判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定…

绩效管理的实际案例:2024年绩效提升重要方法

案例一:目标设定与衡量的艺术 背景:某科技公司每年都会为其全球员工设定年度目标。然而,这些目标往往过于模糊,导致员工不清楚自己需要完成什么。 问题:目标设定不清晰,导致员工感到困惑和不满。 解决方…

array python 交集_模糊数学Python库简介和评测

写在前面模糊数学是国内外许多工学、管理学研究生以上的选修甚至必修课程。但对于非数学专业而言,掌握模糊数学的各种计算方法、了解各种方法的用途(应用场景)其实要比理解模糊数学的“数学”理论要重要得多。目前在Matlab等数学工具中其实也…

架构设计器_大厂案例:马蜂窝大交通业务监控报警系统架构设计与实现

部门的业务线越来越多,任何一个线上运行的应用,都可能因为各种各样的原因出现问题:比如业务层面,订单量比上周减少了,流量突然下降了;技术层面的问题,系统出现 ERROR ,接口响应变慢了…