专栏首页我是攻城师Java程序排查问题利器之Btrace

Java程序排查问题利器之Btrace

(一)Btrace的介绍

BTrace是Java的安全可靠的动态跟踪工具。 他的工作原理是通过 instrument + asm 来对正在运行的java程序中的class类进行动态增强,可以在不用重启的情况下监控系统运行情况,方便的获取程序运行时的数据信息,如方法参数、返回值、全局变量和堆栈信息等,并且做到最少的侵入,占用最少的系统资源。

正如上面描述的一些特性,所以btrace一般是用来排查生产环境jvm问题的一款利器,使用它不用再担心应用程序的日志打的不够全,不够细,也不用为了排查问题一遍遍的重启程序。

(二)Btrace的一些限制

由于Btrace会把脚本逻辑直接侵入到运行的代码中,所以在使用上做很多限制:

1、不能创建对象

2、不能使用数组

3、不能抛出或捕获异常

4、不能使用循环

5、不能使用synchronized关键字

6、属性和方法必须使用static修饰

此外不恰当的使用BTrace可能导致生产程序直接挂掉,所以在上生产环境之前,务必在开发环境充分验证脚本的正确性。

(三)Btrace能干什么

(1)分析任意接口或者方法的耗时情况

(2)分析不断的添加数据时,Map的扩容情况

(3)分析那个方法里面调用了System.gc()方法,并打印出其调用栈

(4)某些方法抛出异常时,分析其运行参数

(5)统计一些接口的调用次数

(6)分析一些方法的代码是否执行到了某一行

(7)..........

注意上面的所有操作,都是监控正在运行中的程序,基本不会产生任何影响。

(四)Btrace的安装

(1)从github上下载最新的二进制包 ,版本是1.3.10.2

wget https://github.com/btraceio/btrace/releases/download/v1.3.10.2/btrace-bin-1.3.10.2.tgz

(2)解压到指定路径

(3)设置环境变量

(4)验证安装是否成功

(5)查看btrace的帮助文档

(五)Btrace使用的一个例子

注意btrace在maven上发布的jar,版本非常低,都是几年前的版本了,如果要编写btrace脚本,建议把安装目录下三个核心jar直接拷贝到工程中临时使用即可,如果想要随时使用,也可以将其上传到你们公司的maven私服上。

(1)在使用btrace之前,我们先需要写一个简单的java程序,模拟成是线上正在跑的程序

代码比较简单,就是每隔随机的时间,随机生成两个整数,进行求和:

(2)主程序已经有了,下面就需要我们写btrace脚本,来监控"我们的线上程序了" 注意,需要在工程里面引入上面提到的3个jar。

监控的代码如下:

(六)模拟测试

经过步骤五,我们已经准备好了模拟程序和监控脚本,下面来部署测试下:

(1)首先,通过maven将模拟程序打包成一个jar

(2)选择一台linux机器将jar包上传

(3)执行命令,启动模拟程序

linux终端输出内容如下:

(4)打开另一个linux终端部署监控脚本OnlineDebug.java到指定目录

赋予执行权限:

执行jps命令,查看模拟程序的进程id

启动监控脚本:

等待几秒后,控制台输出如下:

可以看到监控脚本已经生效,成功获取到了模拟程序的内部参数,以及执行时间等。此刻另一个终端的模拟程序还在 正常运行,但内部其实已经被增强了。

如何退出监控脚本?

非常简单,执行ctrl+c命令,选择1退出即可:

总结:

通过上面的例子,相信大家可以感受到btrace的强大,用其来排查正在运行的程序问题非常方便,感兴趣的朋友们可以自己试一试。

参考链接:

https://github.com/btraceio/btrace/wiki/BTrace-Annotations

https://yq.aliyun.com/articles/7569

https://www.jianshu.com/p/93e94b724476

http://alicharles.com/article/btrace-instrument/

本文分享自微信公众号 - 我是攻城师(woshigcs),作者:woshigcs

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-01-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Google证实下个版本的Android将不使用甲骨文的Java API

    我是攻城师
  • JDK8中LinkedList的工作原理剖析

    我是攻城师
  • Linux 25周年:专访Linux之父Linus Torvalds

    我是攻城师
  • 340亿美元买下红帽!IBM百年以来最大手笔,云市场翻身之战!

    昨天,IBM与开源云软件供应商Red Hat宣布了一项重磅消息:两家公司达成了最终并购协议,IBM将以每股190美元的价格,以现金收购Red Hat所有股份,收...

    新智元
  • Python 3.7 新特性概览(附实例

    译自:https://hackaday.com/2018/07/23/hands-on-with-python-3-7-whats-new-in-the-lat...

    py3study
  • IBM非放弃硬件业务 而是拨开乌云

    ? 3月9日,据外国媒体报道,大约在6个星期之前,IBM宣布以23亿美元的价格将旗下低端服务器业务销售给联想。但是,IBM首席执行官罗睿兰却在最近致股东...

    静一
  • __dopostback的用法

    转载:http://blog.csdn.net/fwj380891124/article/details/8819926

    跟着阿笨一起玩NET
  • 挺不住了吗? 传IBM将裁员11万人 约1/4员工将在下月被遣散

    IBM将经历大规模的重组,在公司43多万员工做,26%的员工将被遣散,大约11.18万人;如果这个数据准确,浙江成为IBM历史上最大规模的裁员,打破了IBM在1...

    人称T客
  • 109岁IBM决定换个活法:拆分成两家公司,未来在「云」里

    今年,已是IBM成立的第109年,它蓝色的徽标一直是计算机届不容置疑的领袖。然而,就在最近,这个「蓝色巨人」突然宣布,将拆分其传统技术服务业务部门,成为一家新的...

    新智元
  • IBM 前商业部门副总裁:要赢得 AI 战争,IBM 应该做这 5 件事

    IBM 首席执行官罗睿兰正在云计算以及Watson沃森系统上下大赌注,希望这能引领公司走向新领域。但这些新服务技术的增速暂时还不足以补救IBM现有产业总利润...

    新智元

扫码关注云+社区

领取腾讯云代金券