之前
Btrace
只是听说过,但还没有具体的用到。最近在排查线上问题的时候,使用了
Btrace
,发现
Btrace
真是在关键时候的利器。
Btrace
是一个安全,可以动态跟踪
java
程序的一种工具。
他的操作不会对原有
java
进程产生影响,不用关闭正在运行的
java
进程,也不会修改
java
进程中的逻辑和数据。
因此,也就成为我们线上跟踪生产代码的有力工具!
Btrace
的脚本编写也非常简单:和写
Java
代码一样的,因此对于我们,学习的曲线几乎是平坦的。
下面就分享一下
Btrace
的一些用法:
如何使用
Btrace
基本用法:
btrace
<pid> <btrace-script>
其中,
btrace
是在
btrace
下载包中的命令
, pid
是
JVM
的进程
id
,
btrace-script
是编写的
btrace
脚本。
Btrace
中的一些概念
-
Probe Point
:
关注点。就是我们要关注应用程序中要执行的“地方”,或者是一些“事件”的发生。
-
Trace Action
:
就是触发了
probe point
的时候,我们所要执行的动作。
-
Action Methods
:我们的
trace action
都是写在某个类的静态方法中的,这个静态方法,就是
action
method
。
Btrace
中的一些限制:
Btrace
的初衷是要“跟踪代码”,而不是修改代码,因此他要保证我们注入的脚本,是安全的,对应用程序来说是“只读”的。也就是说不能修改应用程序的代码或者数据。因此
Btrace
中有一些限制,主要有:
-
不能新建对象
-
不能抛异常
-
不能
catch
异常
-
不能调用实例方法和静态方法。只能调用
Btrace
提供的
com.sun.btrace.BTraceUtils
中的方法和自己在脚本中定义的方法。
-
不能有循环
-
不能有断言
-
……
初看起来,好像限制蛮多的。不过,
com.sun.btrace.BTraceUtils
提供的方法很多,足够我们来“跟踪”代码了。而且,这些限制也是必要的,因为我们只是到那个
JVM
去看看,看看而已。
一个简单的
Btrace
脚本例子,其实就是
Java
代码
其中:
-
其中类名需要加上
@Btrace
的注释,以表示是
Btrace
脚本
-
OnMethod
表示一个
probe point
,这个就表示当执行到
java.awt.Component
这个类的
<init>
方法(这个是
Component
的构建方法)时,就触发
func
方法。
-
@Self
表示这个被实例化的
Component
的引用
-
@OnTimer
表示事件(通过时间)触发的
probe point
,每隔
2
秒触发一次
相信程序不用做过多解释,大家都知道,终端将会打印出从跟踪开始,
Component
被实例化的个数。
支持的跟踪类型
Btrace
支持的跟踪类型有很多了,包括可以跟踪:
-
跟踪到某个实例方法的触发
-
跟踪到某个接口方法的触发
-
跟踪到触发方法的参数,返回值
-
可以将当前触发的线程堆栈打印出来
-
设置还可以跟踪某个方法中的哪一行代码被执行到
Btrace
的
User Guide
http://kenai.com/projects/btrace/pages/UserGuide
关于
Btrace
的原理
详情可见:
http://victorzhzh.iteye.com/blog/965789
什么时候用
Btrace
虽然
Btrace
在关键时候能起到迅速排查问题的作用,但我个人感觉,这还是不到万不得已才使用的好。
-
首先,我们代码上线前,应该充分
review
,充分和相关方进行沟通,以避免不必要的问题发生。
-
其次,我们应该养成记
log
的良好习惯。遇到问题,如果有相关日志可以排查,是最方便的,同时,也是最安全,成本最低的一种排查方法。
-
最后,我们可以结合
btrace
和
jdk
自带的
tool
来排查问题,比如
jstack
,
jstat
等等,快速的定位问题。
以上就是本人刚开始使用
Btrace
的一些成果,希望能对大家排查问题带来一些作用
。
转载请声明原文地址:http://zavakid.iteye.com/blog/976714
- 大小: 54.3 KB
分享到:
相关推荐
在Java开发中,线上问题的排查往往是一项挑战,尤其是在生产环境中无法通过常规的日志分析来定位问题时。本文将介绍两款强大的Java在线问题排查工具——Btrace和Greys,它们能够帮助开发者在不重启服务的情况下,...
博客地址: https://blog.csdn.net/lydms/article/details/125238249 Xmind整理: https://download.csdn.net/download/weixin_44624117/8561266 相关资料: ...
大厂高手骆俊武出品的《漫谈线上问题排查》电子书
JAVA线上问题排查和工具 内容详细 结合实际工作 贴合实际
本文档围绕Java线上故障排查提供了详尽的方案和知识点,覆盖了从问题定位到解决方案的多个方面。 首先,了解Java线上常见问题的分类是非常重要的。在生产环境中,问题可大致分为系统异常和业务异常两大类。系统异常...
### 线上问题排查知识点 #### 一、查找 JDK 安装路径及验证方法 在 Linux 系统中,为了高效地排查线上 Java 应用的问题,首先需要明确 Java Development Kit (JDK) 的安装位置。这可以通过以下两种方式实现: 1. ...
Arthas线上应用诊断利器概述 Arthas是一款阿里巴巴开源的Java诊断工具,自2018年9月开源以来,已经拥有了19.7K星星的支持。 Arthas提供了强大的诊断功能,可以实时查看应用程序的运行情况,诊断问题,优化性能。 ...
**BTrace:Java线上调试利器** BTrace是Java开发者在生产环境中进行问题排查的一个强大工具。它无需修改或重新部署代码,就能实时地对运行中的Java应用程序进行动态追踪,帮助我们收集必要的信息,如方法调用、性能...
线上问题排查是开发和运维工作中的一个重要组成部分,其目的是为了快速定位和解决问题,保证系统的稳定运行。在排查问题的过程中,使用合适的方法和工具至关重要,它们可以帮助我们更高效地进行问题分析和定位。下面...
服务器排查思路是指在服务器出现问题时,通过一系列的排查步骤和命令来定位和解决问题的过程。下面将针对磁盘不足、CPU 过高和 Tomcat假死三种常见的问题进行排查思路和命令案例的讲解。 1. 磁盘不足 当磁盘不足时...
Java线上故障排查是一项复杂而关键的任务,需要系统地收集和分析信息,以便快速定位并解决问题。文档中提到的各个知识点将帮助我们深入了解如何在Java环境中有效进行线上故障排查。 首先,文档提到了几种常见的排查...
JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC 一条龙! 本文档将详细介绍 Java 线上故障排查的完整套路,涵盖 CPU、磁盘、内存、网络和 GC 等多个方面的故障排查方法。 一、CPU 故障排查 CPU 故障...
烟花爆竹隐患排查治理制度是针对烟花爆竹行业中潜在的安全风险而设立的一项重要管理机制,旨在预防和减少因烟花爆竹引发的事故,保障人员安全和财产不受损失。烟花爆竹因其特殊的易燃易爆性质,使得任何微小的疏忽都...
Java 诊断利器 Arthas 排查问题实践 Arthas 是 Alibaba 开源的 Java 诊断工具,于 2018 年 9 月开源,目前在 Github 上获得了 11,000 多个星标。 Arthas 的主要功能特性包括查看类加载情况、反编译类、热更新类、...
Arthas在线问题排查思路 Arthas是一款功能强大且灵活的在线问题排查工具,它可以帮助开发者快速定位和解决在线问题。本文将详细介绍Arthas在线问题排查思路,包括常见的排查场景、改进策略和排查思路。 常见的排查...
在IT运维与开发工作中,线上问题的排查与解决是维护系统稳定性和用户体验的关键环节。本篇文章将基于提供的文件信息,深入解析线上问题调查中常用的Linux性能检测工具及JVM性能相关命令,并提供详细的解释与应用场景...
这使得开发者可以在不修改源代码的前提下,获取运行时的详细信息,帮助快速定位和解决线上问题。 **BTrace的工作原理** BTrace通过字节码注入的方式,动态修改正在运行的Java虚拟机(JVM)中的类,添加跟踪代码。...
特种设备隐患排查清单——氧舱专项要求.pdf
Java线上故障排查是每个Java开发者或运维人员必备的技能之一,尤其在生产环境中,快速定位并解决问题至关重要。本文将深入探讨Java线上故障排查方案,帮助你掌握一系列实用的方法和技术。 一、日志分析 1. 日志级别...