BTrace

[Done]BTrace使用小记

梦想的初衷 提交于 2020-03-10 10:28:42
项目上线,发现集群机器每隔1小时会准时进行fullgc,JMC中显示了System.gc()触发了fullgc: 代码搜了一下自然是搜不到显示调用这个代码的(谁会这么干!拍死!!!)依赖jar包中到是有,但是看看也不像。 在大神的建议下,决定使用Btrace跟踪一下调用栈。 Pom依赖: <dependency> <groupId>com.sun.tools.btrace</groupId> <artifactId>btrace-boot</artifactId> <version>1.2.3</version> </dependency> java类: import com.sun.btrace.annotations.BTrace; import com.sun.btrace.annotations.OnMethod; import static com.sun.btrace.BTraceUtils.jstack; import static com.sun.btrace.BTraceUtils.println; @BTrace public class GCBtrace { @OnMethod(clazz = "java.lang.System", method = "gc") public static void onSystemGC() { println(

初识btrace

僤鯓⒐⒋嵵緔 提交于 2020-03-10 10:27:21
此文已由作者易国强授权网易云社区发布。 欢迎访问 网易云社区 ,了解更多网易技术产品运营经验。 1 btrace简介 BTrace是一个非常不错的java诊断工具。BTrace 中的B表示bytecode,它是在字节码层面上对代码进行trace ,通过在运行中的java类中注入trace代码, 并对运行中的目标程序进行热交换(hotswap)来达到对代码的跟踪 。BTrace应用较为广泛的原因应该是其安全性和无侵入性,以及热交互技术,使得我们无需启动Agent的情况下动态跟踪分析,其安全性不会导致对目标Java进程的任何破坏性影响,使得BTrace成为我们线上产品问题定位的利器。无侵入性无需我们对原有代码做任何修改,降低上线风险和测试成本,并且无需重启启动目标Java进程进行Agent加载即可动态分析和跟踪目标程序,可以说BTrace可以满足大部分的应用场景。 2 btrace原理 总体来说,BTrace是基于动态字节码修改技术(Hotswap)来实现运行时java程序的跟踪和替换。大体的原理如下所示: Client(Java compile api + attach api) + Agent(脚本解析引擎 + ASM + JDK6 Instumentation) + Socket BTrace的入口类在 https://gi thub.com/btraceio/btrace

BTrace使用小结

北战南征 提交于 2020-03-10 10:24:16
简介 BTrace 是一个安全的JVM动态追踪工具,最初为原Sun公司Kenai项目下面的一个子项目。 典型的使用场景是,“我要查个问题,可那个方法没有打印入口参数和返回结果日志”,“我想看某个方法的执行耗时”,“我想查看某方法如System.GC()的调用栈”等等,这些都是BTrace可以小试牛刀的地方。它的优势是,直接attach应用JVM,不用重启应用进程,可比较快速方便地定位问题。 不错的教程 如果想简单学习一下BTrace,推荐几个不错的教程,建议先看看下面几篇文章: Btrace入门到熟练小工完全指南 by 江南白衣 , 强烈建议先读它! 如何在生产环境使用Btrace进行调试 by 占小狼 ,点评同事, 强烈建议读 。 BTrace Github Wiki BTrace User's Guide ,原官方文档 BTrace原理分析 ,进阶文章,日期比较早了,想深入了解的可以一看。 使用 下面是我学习BTrace的一点笔记和小结。不过还是先来个例子比较直观。 一个例子 一个简单的例子,我想查看某工程下这个方法的入参及返回值,但代码中没有打印方法返回结果,这个时候可以用BTrace试一下。 DemoView com.package.name.Demo.getDemoView(long id) 编写跟踪脚本 MethodReturnTracing.java 如下:

Btrace入门到熟练小工完全指南

狂风中的少年 提交于 2020-03-10 10:19:51
BTrace是神器,每一个需要每天解决线上问题,但完全不用BTrace的Java工程师,都是可疑的。 BTrace的最大好处,是可以通过自己编写的脚本,获取应用的一切调用信息。而不需要不断地修改代码,加入System.out.println(), 然后重启,然后重启,然后重启应用!!! 同时,特别严格的约束,保证自己的消耗特别小,只要定义脚本时不作大死,直接在生产环境打开也没影响。 在网上搜索BTrace出来的文章都有点旧了,而且不够详细,于是决定,重新写一份。 码这么多的字好辛苦,请保留原文链接: http://calvin1978.blogcn.com/articles/btrace1.html 1. 概述 1.1 快速开始 BTrace搬家了!! 已经搬离了Sun,搬到了 http://github.com/btraceio/btrace ,目前的版本已经是1.38。 在Release页面里下载最新Zip版,解压就能用,UserGuide和 Samples 也在里面。 先抄一个UserGuide里的例子: import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; @BTrace public class HelloWorld { @OnMethod( clazz =

Btrace 使用小结

怎甘沉沦 提交于 2020-03-10 09:14:36
BTrace是神器,每一个需要每天解决线上问题,但完全不用BTrace的Java工程师,都是可疑的。 BTrace的最大好处,是可以通过自己编写的脚本,获取应用的一切调用信息。而不需要重启应用! 只要定义脚本时不作大死(比如查看谁调用了HashMap的put方法),直接在生产环境打开也没影响。 1.简介 项目地址:http://github.com/btraceio/btrace 用户指南:https://kenai.com/projects/btrace/pages/UserGuide 在Release页面里下载最新Zip版,解压就能用 tar -zxvf btrace-bin-1.3.8.3.tgz export JAVA_HOME=/opt/taobao/java export PATH=$JAVA_HOME/bin:$PATH ./bin/btrace -cp /home/admin/projectname/target/projectname/BOOT-INF/classes 2016 SlowCall.java ./bin/btrace -cp /home/admin/projectname/target/projectname.war/WEB-INF/classes:/home/admin/projectname/target/projectname.war/WEB

基于BTrace监控调试Java代码

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-27 10:43:47
BTrace是Java的一个动态代码追踪工具,通过编写btrace脚本,它可以动态的向目标应用程序的字节码注入追踪代码,通过修改字节码的方式,达到监控调试和定位问题的目的,是解决线上问题的利器。 BTrace项目的Github主页 https://github.com/btraceio/btrace ,本文中示例代码在 https://github.com/cellei/btrace-practice 快速开始 我们使用 BTrace User's Guide 中的示例来做一个快速开始: import com.sun.btrace.annotations.*; @BTrace public class HelloWorld { @OnMethod( clazz="java.lang.Thread", method="start", location = @Location(Kind.ENTRY) ) public static void func() { BTraceUtils.println("about to start a thread!"); } } BTrace包下载解压后,把bin目录加入环境变量,执行命令 btrace <pid> HelloWorld.java ,pid是Java目标程序的进程号,可以使用 jps 或者 ps 命令查询到

00-02、面试前或许需要准备的知识

余生长醉 提交于 2020-02-27 07:31:41
在面试前,以及在工作中(我常说,要以随时准备面试的状态准备着😃),作为一个Java开发,应该需要准备一些技能和知识,以提升自己并拿下面试。不知道的一定要及时深入地补上,并记下笔记,最好是写成博客。 对于我们很多开发的人来说,最近工作中使用的技术可能会相对熟悉;而没用的或是用过了后来不怎么用的,自然的就渐渐地忘了(毕竟人脑这个内存还是有限的,成本也很高,不用的就放到外存吧),因此深入地学习并记录以便后续我们更容易复习。 其实我们也都知道,现在面试要求都很高,有句话怎么说来着?“面试造航母,工作拧螺丝”,这从侧面说出了一个问题,如果你不会造航母,连拧螺丝的机会都得不了(当然有创业能力的人除外);当然,也从另一个侧面说明了(某一层次的)开发人员的数量很多,催生出了一些畸形行业现象。我们说的封装理念(对使用者透明)哪里去了?框架说好的要让开发更专注核心业务的开发哪里去了?为什么要去了解很多东西的原理、源码实现等等,一个Java开发还要了解运维、容器等等? 我想这是有道理的,开源在这个行业做得很好,既然是Free Software,那么你可自由地修改,有了问题不会有专门的商业公司为你服务,那么只能自己去解决,所以还得知道源码。都说程序员是目前 仅存的纯手工工种 ,但也是自动化程度很高的工作,都是计算机😃。运维和开发已然交织,因此什么构建、容器、架构等等都得知道。既然选择了就坚持下去吧。

linux下保证高可用Java服务化系统高效运行的必备工具脚本

喜你入骨 提交于 2020-01-17 07:49:42
无论是技术开发人员还是架构设计人员都是在实践中成长起来的,他们通过实践进行总结,总结后把经验升华并再次应用到实践中去,进一步提供生产效率。 本文介绍笔者在互联网公司里线上应急和技术攻关过程中积累的应用层脚本和Java虚拟机命令,这些脚本和命令在发现问题和定位问题的过程中起到关键作用,在特定的问题环境下,堪称快速定位问题的小倚天剑以及快速解决问题的微屠龙刀。 本文在介绍脚本和命令之前,先给大家介绍笔者的Linux环境以及在Linux环境下搭建的一个原创Java发号器服务,用来向大家演示脚本和命令的使用方法,力争做到让大家拿来即用的效果。另外,在介绍完所有的脚本和命令之后,我会把所有的命令和脚本收集在一个表格中,便于大家随时参考和使用,并推荐大家把这个表格打印出来放在自己的办公桌上,需要的时候看一眼,便可快速发现和解决问题的工具。 脚本和命令系列主题中计划提供两篇文章,这篇文章是脚本和命令系列主题中的其中一篇,本文聚焦在那些“神奇的”应用层脚本和Java虚拟机命令,曾经在不同程度上帮助笔者在线上应急和技术攻关的过程中解决过不小的问题,通过这篇文章把这些脚本和命令推广给读者,让读者也能够应用在实践中,切实有效的帮助读者解决实际问题。 环境搭建和示例服务启动 首先,使用的Linux版本为: OS:Ubuntu 14.04.2 LTS 内核:3.16.0-30-generic 硬件架构

BTrace入门篇之最简洁安装教程

我与影子孤独终老i 提交于 2020-01-09 17:28:04
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1)访问btrace github页面 https://github.com/btraceio/btrace/releases 2)下载并解压到无中文目录。 3)配置环境变量 4)命令行中输入btrace,得到如下提示,就证明你安装成功了。 欢迎关注我的公号:彪悍大蓝猫,持续分享SpringCloud、大数据干货~ 来源: oschina 链接: https://my.oschina.net/u/3262136/blog/3155440

Btrace探索&OQL测试char占用大小

不打扰是莪最后的温柔 提交于 2019-12-23 14:18:47
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Btrace探索&OQL测试char占用大小 准备工作 以下都在jvisualvm上运行,windows上可能会装插件,如图所示,在工具-插件中,可以在线装,把可用插件中能装的都装上吧! Btrace 被测试的java代码 public class BTraceTest { public static void main(String[] args) { while (true) { asfqwteaf(1); } } public static void asfqwteaf(int v) { System.out.println(System.currentTimeMillis()); try { Thread.sleep(new Random().nextInt(5) * 1000); } catch (InterruptedException e) { e.printStackTrace(); } } } 测试1:监控方法执行用时 Btrace.java /* BTrace Script Template */ import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; @BTrace public