认识一下java神器Btrace】的更多相关文章

转载: http://calvin1978.blogcn.com/articles/btrace1.html BTrace是神器,每一个需要每天解决线上问题,但完全不用BTrace的Java工程师,都是可疑的. BTrace的最大好处,是可以通过自己编写的脚本,获取应用的一切调用信息.而不需要不断地修改代码,加入System.out.println(), 然后重启,然后重启,然后重启应用!!! 同时,特别严格的约束,保证自己的消耗特别小,只要定义脚本时不作大死,直接在生产环境打开也没影响. 在网…
官网:https://github.com/btraceio/btrace 下载:https://github.com/btraceio/btrace/releases/tag/v1.3.9 文档:https://github.com/btraceio/btrace/wiki 目前最新版是:1.3.9 Btrace 进入非安全模式: 1. @BTrace(unsafe=true) 2. btrace脚本中修改java命令行的参数com.sun.btrace.unsafe=true…
概述 生产环境中的服务可能会出现各种问题,但总不能让服务下线来专门排查错误,这时候最好有一些手段来获取程序运行时信息,比如 接口方法参数/返回值.外部调用情况 以及 函数执行时间等信息以便定位问题.传统的日志记录方式的确可以,但有时非常麻烦,甚至可能需要重启服务,因此代价太大,这时可以借助一个牛批的工具:BTrace ! BTrace 可用于动态跟踪正在运行的 Java程序,其原理是通过动态地检测目标应用程序的类并注入跟踪代码 ( "字节码跟踪" ),因此可以直接用于监控和追踪线上问题…
BTrace 是什么? BTrace 是一个动态安全的 Java 追踪工具,它通过向运行中的 Java 程序植入字节码文件,来对运行中的 Java 程序热更新,方便的获取程序运行时的数据信息,并且,保证自己的消耗特别小,大部分情况下不会影响 Java 程序的性能. BTrace 能干什么? 相信每一位开发都或多或少的干过这档子事:为了解决线上的一个 bug,不得不在代码中打印下入参.出参数据,然后再重启服务器,观察日志.BTrace 的出现就是为了解决这类事宜,BTrace 的最大好处,是可以通…
前言: 对线上的java服务, 往往采用日志进行问题处理和分析. 倘若日志缺乏相关的信息时, 那又该如何处理? 远程调试会影响服务的正常工作, 修改代码重新部署的方案其实时性和灵活性难以保证(线上服务的流程繁琐, 问题追踪的不确定性), 有没有两全的完美方案(不影响正常服务, 又灵活/无侵入性)呢? 答案是有, 它就是人见人爱, 花见花开的神器BTrace. 那BTrace究竟是这么样的神器, 为何它只要998(啊呸..., -_-bbb). 好了, 让我们一步一步的掀起它的红盖头来. 本系列讲…
Btrace BTrace是sun公司推出的一款Java 动态.安全追踪(监控)工具,可以在不用重启的情况下监控系统运行情况,方便的获取程序运行时的数据信息,如方法参数.返回值.全局变量和堆栈信息等,并且做到最少的侵入,占用最少的系统资源. 项目地址:Btrace用户指南:UserGuide Btrace使用 在Release页面里下载最新Zip版,解压就能用tar -zxvf btrace-bin-1.3.8.3.tgzexport JAVA_HOME=/opt/taobao/javaexpo…
这是个比较典型的java内存使用问题,定位过程也比较直接,但对新人还是有点参考价值的,所以就纪录了一下. 下面介绍一下在不了解系统代码的情况下,如何一步步分析和定位到具体代码的排查过程 (以便新人参考和自己回顾) 初步的现象 业务系统消费MQ中消息速度变慢,积压了200多万条消息,通过jstat观察到业务系统fullgc比较频繁,到最后干脆OOM了:  进一步分析 既然知道了内存使用存在问题,那么就要知道是哪些对象占用了大量内存. 很多人都会想到把堆dump下来再用MAT等工具进行分析,但du…
线上问题排查神器 Arthas 之前介绍过 BTrace,线上问题排查神器 BTrace 的使用,也说它是线上问题排查神器.都是神器,但今天这个也很厉害,是不是更厉害不好说,但是使用起来非常简单.如果你用 BTrace 的话,需要事先写好探测脚本,然后上传到需要排查问题的服务器,然后执行命令.比方说获取某个方法的参数.返回值.异常等.而 Athas 方便在不用写脚本,直接用命令行方式就可以,使用它就好像在用安装在服务器上的各种工具一样,比如 top.jps.jmap 等. 他们背后的逻辑都是字节…
btrace使用 目录btracee是btrace的解压目录 btrace/btrace是btrace的项目工程 root@ubuntu:/usr/local/bogon/btrace# tree btrace btrace ├── bin ├── btrace-agent.jar ├── btrace-boot.jar ├── btrace-client.jar └── src ├── btrace ├── HelloWorld.class ├── HelloWorld.java └── Tr…
教程英文版来源:https://github.com/btraceio/btrace/blob/master/docs/usersguide.html BTrace用户指南 BTrace是一种安全,动态的Java跟踪工具.BTrace通过动态(字节码)检测正在运行的Java程序的类来工作.BTrace将跟踪操作插入到正在运行的Java程序的类中,并对跟踪的程序类进行热交换. BTrace术语 探针点 执行一组跟踪语句的“location”或“event”.探针点是我们想要执行一些跟踪语句的感兴趣…
背景:美团的技术沙龙分享的文章都还是很不错的,通俗易懂,开阔视野,后面又机会要好好实践一番. Java动态追踪技术探究 楔子 jsp的修改 重新加载不需要重启servlet.如何在不重启jvm的情况下,修改一个对象的行为呢? Java的对象行为(方法.函数)是存储在方法区的. “倒着推,手写没问题,编译没问题,至于加载……有没有办法加载一个已经加载过的类呢?如果有的话,我们就能修改字节码中目标方法所在的区域,然后重新加载这个类,这样方法区中的对象行为(方法)就被改变了,而且不改变对象的属性,也不…
引子 在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话: “Debug一下吧.” “线上机器,没开Debug端口.” “看日志,看看请求值和返回值分别是什么?” “那段代码没打印日志.” “改代码,加日志,重新发布一次.” “怀疑是线程池的问题,重启会破坏现场.” 长达几十秒的沉默之后:“据说,排查问题的最高境界,就是只通过Review代码来发现问题.” 比几十秒长几十倍的沉默之后:“我轮询了那段代码一十七遍之后,终于得…
简介 BTrace是一个安全的JVM动态追踪工具,最初为原Sun公司Kenai项目下面的一个子项目. 典型的使用场景是,“我要查个问题,可那个方法没有打印入口参数和返回结果日志”,“我想看某个方法的执行耗时”,“我想查看某方法如System.GC()的调用栈”等等,这些都是BTrace可以小试牛刀的地方.它的优势是,直接attach应用JVM,不用重启应用进程,可比较快速方便地定位问题. 不错的教程 如果想简单学习一下BTrace,推荐几个不错的教程,建议先看看下面几篇文章: Btrace入门到…
转载于:https://shaojun.name/2016/07/260 btrace script import static com.sun.btrace.BTraceUtils.name; import static com.sun.btrace.BTraceUtils.print; import static com.sun.btrace.BTraceUtils.println; import static com.sun.btrace.BTraceUtils.probeClass; i…
项目上线,发现集群机器每隔1小时会准时进行fullgc,JMC中显示了System.gc()触发了fullgc: 代码搜了一下自然是搜不到显示调用这个代码的(谁会这么干!拍死!!!)依赖jar包中到是有,但是看看也不像. 在大神的建议下,决定使用Btrace跟踪一下调用栈. Pom依赖: <dependency> <groupId>com.sun.tools.btrace</groupId> <artifactId>btrace-boot</artif…
执行btrace命令报错:Unable to open socket file: target process not responding or HotSpot VM not loaded ------------------------------------------------------------------------------------------- -bash-4.1# /apps/svr/jdk7/bin/jstack/jps -l32382 sun.tools.jps…
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1 btrace简介 BTrace是一个非常不错的java诊断工具.BTrace 中的B表示bytecode,它是在字节码层面上对代码进行trace ,通过在运行中的java类中注入trace代码, 并对运行中的目标程序进行热交换(hotswap)来达到对代码的跟踪 .BTrace应用较为广泛的原因应该是其安全性和无侵入性,以及热交互技术,使得我们无需启动Agent的情况下动态跟踪分析,其安全性不会导致对…
目录 前言 如何阅读class文件 基本概念 无符号数&表 常量池 魔数(magic number) & 版本号 常量池 访问标志 类引索&父类引索&接口引索集合 字段表集合 方法表集合 属性表集合 Code属性 使用javap解析class文件 查阅表格 前言 最近在研究Java的反射和动态代理,发现使用这两个Java神器需要了解.class文件的字节码.于是翻阅了相关资料,在这篇博客中进行一番整理,也作为自己学习的记录. 如何阅读class文件 Java的可移植性是基于…
java.lang.instrument.Instrumentation 看完文档之后,我们发现这么两个接口:redefineClasses和retransformClasses.一个是重新定义class,一个是修改class.这两个大同小异,看redefineClasses的说明: This method is used to replace the definition of a class without reference to the existing class file bytes…
目录 1.引言 2. 输出 logback 状态数据 3. logback 异步输出日志 3.1 异步输出配置 3.2 异步输出原理 4. springboot 多环境下 logback 配置 5. MDC 分布式应用追踪请求 5.1 添加拦截器 5.1.1 拦截器实现 5.1.2 注册拦截器到web配置中 5.2 设置 MDC 日志输出 6. 总结 参考资料 往期文章 一句话概括:logback 在实现了基本的日志输出到文件功能后,在企业实践中,还会有其它的进阶需求,本文对logback的进阶…
目录 1.引言 2.logback简介 3. springboot默认日志框架-logback 3.1 springboot示例工程搭建 3.2 日志输出与基本配置 3.2.1 日志默认输出 3.2.2 基本配置 3.3 自定义logback配置 3.3.1 logback配置文件加载顺序 3.3.2 logback配置文件示例 4. logback配置文件详述 4.1 配置文件结构 4.2 根元素configuration 4.2.1 属性配置 4.2.2 定义上下文名称和变量 4.3 日志输…
目录 1.引言 2.swagger简介 2.1 swagger 介绍 2.2 springfox.swagger与springboot 3. 使用springboot+swagger构建接口文档 3.1 springboot示例工程搭建 3.2 引入swagger2与基本配置 3.2.1 添加springfox-swagger依赖 3.2.2 配置swagger 3.2.3 查看swagger自动生成的描述文档 3.3 添加swagger-ui界面交互 4. [企业实践]配置参数化与包过滤 4.…
使用-XX:+TraceClassPaths或者在服务器上执行jinfo时,都能得到classpath包含的jar包,例如: java.class.path = local/aaa/lib/spring-data-redis-1.8.3.RELEASE.jar:/usr/local/aaa/lib/spring-tx-4.3.8.RELEASE.jar:/usr/local/aaa/lib/spring-jdbc-4.3.7.RELEASE.jar:/usr/local/aaa/lib/clas…
一. 语言 计算机语言:人和计算机之间沟通的语言计算机语言: 按照级别分类:(越高级月进阶人类) 机器语言: 汇编语言: 助记符 ag. add 2 3 高级语言: c, PHP, java , .net 二. 语言的执行方式 编译执行: 源文件,在执行时会被编译成二进制文件(文件里只有0和1) 优点:在没有修改的的情况下,只修改一次,因此运行速度快 缺点:可移植性插差.底层连接紧密,因此二进制文件移植到其他操作系统不能运行. 场合:底层开发,不做底层修改,使用编译语言.(C\C++) 解释执行…
目录 简介 一个内存泄露的例子 使用JFR和JMC来分析内存泄露 OldObjectSample 总结 简介 虽然java有自动化的GC,但是还会有内存泄露的情况.当然java中的内存泄露跟C++中的泄露不同. 在C++中所有被分配的内存对象都需要要程序员手动释放.但是在java中并不需要这个过程,一切都是由GC来自动完成的.那么是不是java中就没有内存泄露了呢? 要回答这个问题我们首先需要界定一下什么是内存泄露.如果说有时候我们不再使用的对象却不能被GC释放的话,那么就可以说发生了内存泄露.…
Java对象行为 java.lang.instrument.Instrumentation 直接操作字节码 BTrace Arthas 三生万物 在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话:"Debug一下吧.""线上机器,没开Debug端口.""看日志,看看请求值和返回值分别是什么?""那段代码没打印日志.""改代码,加日志,重新发布…
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /** * 需求:计算网页访问量前三名 * 用户:喜欢视频 直播 * 帮助企业做经营和决策 * * 看数据 */ object UrlCount { def main(args: Array[String]): Unit = { //1.加载数据 val conf:SparkConf = new Spa…
BTrace 是什么 BTrace 是检查和解决线上的问题的杀器,BTrace 可以通过编写脚本的方式,获取程序执行过程中的一切信息,并且,注意了,不用重启服务,是的,不用重启服务.写好脚本,直接用命令执行即可,不用动原程序的代码. 原理 总体来说,BTrace 是基于动态字节码修改技术(Hotswap)来实现运行时 java 程序的跟踪和替换.大体的原理可以用下面的公式描述:Client(Java compile api + attach api) + Agent(脚本解析引擎 + ASM +…
前言 当你兴冲冲地开始运行自己的Java项目时,你是否遇到过如下问题: 程序在稳定运行了,可是实现的功能点了没反应. 为了修复Bug而上线的新版本,上线后发现Bug依然在,却想不通哪里有问题? 想到可能出现问题的地方,却发现那里没打日志,没法在运行中看到问题,只能加了日志输出重新打包--部署--上线 程序功能正常了,可是为啥响应时间这么慢,在哪里出现了问题? 程序不但稳定运行,而且功能完美,但跑了几天或者几周过后,发现响应速度变慢了,是不是内存泄漏了? 以前,你碰到这些问题,解决的办法大多是,修…
在生产环境中经常遇到格式各样的问题,如OOM或者莫名其妙的进程死掉.一般情况下是通过修改程序,添加打印日志:然后重新发布程序来完成.然而,这不仅麻烦,而且带来很多不可控的因素.有没有一种方式,在不修改原有运行程序的情况下获取运行时的数据信息呢?如方法参数.返回值.全局变量.堆栈信息等.Btrace就是这样一个工具,它可以在不修改原有代码的情况下动态地追踪java运行程序,通过hotswap技术,动态将跟踪字节码注入到运行类中,对运行代码侵入较小,对性能上的影响可以忽略不计. 基础说明 由于Btr…