BTrace 入门教程

简介: 很久没发文了,不知道小伙伴们是不是忘记我们了?主要是最近我和znlover在利用业余时间开发一款小程序,一直没时间写文章,小程序目前在内测阶段,在接下来的时间,我们会持续更新文章。在此,给支持我们的读者说声谢谢,感谢你们一直在默默支持我们。

在生产环境,如何排查疑难杂症?如何动态获取应用信息?这是我们许多Java程序员头痛的问题,自从有了 BTrace 很多问题便迎刃而解。


一、BTrace 是什么?


顾名思义,我们都知道单词trace,指跟踪,那么BTrace肯定就是跟调试有关的一款工具。


官方解释:是一款可靠的,用来动态跟踪 Java 程序的工具。可通过动态对运行中的 Java 程序进行字节码生成来工作。BTrace 会对运行中的 Java 程序的类插入一些跟踪操作,来对被跟踪的程序进行热替换。


BTrace 之所以称为神器,主要是它直接attach应用JVM,不用重启应用进程,可快速定位问题。


二、认识 BTrace


去官网下载 BTrace,配置环境变量以便在任何路径下能执行 btrace 命令。


在 %BTRACE_HOME%\bin 目录下,我们会发现三个脚本:btrace、btracec、btracer。


btrace:对运行中的JAVA程序执行btrace脚本。

btracec:预编译BTrace脚本,在编译期验证脚本正确性。

btracer:同时启动应用程序和BTrace脚本。


三、知识点


类注解


@BTrace 指明该java类为一个btrace脚本文件。


方法注解


image.png


@OnMethod 是一个常用的注解,需要重点掌握;它的属性如下:


clazz:指定要跟踪的类;

method:指定要追踪的方法。

type:指定要被跟踪的方法的签名;一般可以不声明,绝大部分情况下依靠clazz和method即可确定要跟踪的方法。

location:指定要跟踪的方法的位置。如@Location(Kind.RETURN)表示方法返回处,@Location(Kind.ENTRY)表示方法入口处,@Location(Kind.ERROR)表示异常没被捕获被抛出目标方法之外时,

@Location(Kind.THROW)表示异常抛出时,@Location(Kind.CATCH)表示异常被捕获时,@Location(Kind.CALL)表示被调用时,@Location(Kind.CALL)表示被调用时,@Location(Kind.Line)表示执行到某行时。


方法参数注解


image.png


四、入门实例


其实例子可以去 %BTRACE_HOME%\samples\ 目录找。


作者建议在写脚本的时候,引入 maven 相关依赖,这样做的好处在于能够只能提示,如下:


image.png


Demo.java 如下:


image.png


BtraceDemo.java 如下:


image.png


测试结果:


image.png


这里只是一个简单的例子入门,更加复杂的线上操作实例,需要根据具体的业务来写,建议大家多去看一下btrace作者提供的实例。


五、参考


wiki:https://github.com/btraceio/btrace/wiki

github:https://github.com/btraceio/btrace

代码自动生成工具: https://btrace.org/btrace/


相关文章
|
Java
BTrace如何使用?
BTrace如何使用?
304 0
|
6月前
|
消息中间件 运维 监控
加一个JVM参数,让系统可用率从95%提高到99.995%
本文针对一个高并发(10W+ QPS)、低延迟(毫秒级返回)的系统因内存索引切换导致的不稳定问题,深入分析并优化了JVM参数配置。通过定位问题根源为GC压力大,尝试了多种优化手段:调整MaxTenuringThreshold、InitialTenuringThreshold、AlwaysTenure等参数让索引尽早晋升到老年代;探索PretenureSizeThreshold和G1HeapRegionSize实现索引直接分配到老年代;加速索引复制过程以及升级至JDK11使用ZGC。
631 82
加一个JVM参数,让系统可用率从95%提高到99.995%
|
存储 安全 数据安全/隐私保护
打造安全防线!Python AES&RSA加密工具,黑客绕道走的秘籍
【9月更文挑战第9天】随着数字化时代的到来,信息安全问题日益凸显。本文将介绍如何使用Python结合AES与RSA两种加密算法,构建强大的加密工具。AES以其高效性和强安全性著称,适用于大量数据的快速加密;RSA作为非对称加密算法,在加密小量数据及实现数字签名方面表现卓越。通过整合两者,可以构建既安全又灵活的加密系统。首先,需要安装pycryptodome库。接着,实现AES加密与解密功能,最后利用RSA加密AES密钥,确保其安全传输。这种设计不仅提高了数据传输效率,还增强了密钥交换的安全性,为敏感数据提供坚实保护。
471 43
|
6月前
|
网络协议 NoSQL Redis
Docker Compose--模板文件
Docker Compose--模板文件
408 29
|
监控 Java 测试技术
性能工具之Java分析工具BTrace入门
【5月更文挑战第25天】性能工具之Java分析工具BTrace入门
363 2
|
算法 Java
JVM常用运行时参数说明
JVM常用运行时参数说明
242 0
|
Java Maven Spring
SpringBoot日志整合
SpringBoot日志整合
222 2
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
存储 人工智能 API
【AIGC】基于检索增强技术(RAG)构建大语言模型(LLM)应用程序
【5月更文挑战第7天】基于检索增强技术(RAG)构建大语言模型(LLM)应用程序实践
667 1
|
安全 Linux Shell
Linux服务器 /etc/pam.d目录下的文件都是什么作用?
【8月更文挑战第2天】Linux服务器 /etc/pam.d目录下的文件都是什么作用?
1771 2