之前
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
分享到:
相关推荐
介绍Greys介绍3. 实例-使具排查问题urs新提供了远程cookie的校验jar包,其中关键的法为远程调法CookieDecoder.requestDeco
博客地址: https://blog.csdn.net/lydms/article/details/125238249 Xmind整理: https://download.csdn.net/download/weixin_44624117/8561266 相关资料: ...
大厂高手骆俊武出品的《漫谈线上问题排查》电子书
线上排查思路,一些关于服务器排查的命令与案例
JAVA线上问题排查和工具 内容详细 结合实际工作 贴合实际
线上问题排查常用命令,包含linux命令,jstat,jinfo,jps等命令
烟花爆竹隐患排查治理制度——精品资料..doc
Java线上故障排查方案(2).pdf
主要介绍了JAVA线上常见问题排查手段(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
线上故障排查方法记录
线上问题的排查方法及工具手段,对开发或者运维排查线上问题有很大帮助及使用排查问题使用的工具介绍
将计算机体系结构、操作系统、性能调优、TCP/IP协议栈等核心知识浓缩为180页PPT。架构师看家功底、面试加分项
线上问题排查思路
Java诊断利器Arthas排查问题实践.pptx
Java线上故障排查方案 结合实战,超详细Java线上故障排查方案总结,值得收藏
这个是讲解PHP 线上环境出问题后如何解决的ppt,大牛的推荐,你不得不看!
线上故障排查全套路,总有一款适合你线上故障排查全套路,总有一款适合你来自:fredal的博客链接:https://fredal.xin/java-error-c
主要介绍了JAVA线上常见问题排查手段汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下