SlideShare a Scribd company logo
1 of 30
Download to read offline
Kris Mok, Software Engineer, Taobao
@rednaxelafx
莫枢 /“撒迦”
BTrace简介
     原理与实践




 阿里巴巴集团-技术共享平台-
  核心系统研发-专用计算组
        莫枢(撒迦)
         2012-04-10
关于我…

• 2009年毕业自南京大学软件学院
• 同年10月加入淘宝
• 目前在参不JVM相关研发
• 编程语言的设计不实现爱好者


• 希望不各位同好多交流!
 – 博客: http://rednaxelafx.iteye.com/
 – 新浪微博: http://weibo.com/rednaxelafx
 – 高级语言虚拟机群组: http://hllvm.group.iteye.com/
 – JVM源码阅读活动微群: http://q.weibo.com/1823766
分享目标

• 了解BTrace的设计不实现方式
 – 以此出发,了解其它一些Java监控工具的原理

• 了解BTrace的常见用法和使用限制

• 学习几个BTrace解决问题的案例
BTrace的设计与实现

BTRACE原理
BTrace原理

• BTrace用于解决什么问题?

• BTrace是如何实现的?

• 其它Java监控工具不BTrace有何异同?
BTrace是…

BTrace is a safe, dynamic tracing tool for the Java
platform. BTrace can be used to dynamically trace a
running Java program (similar to DTrace for
OpenSolaris applications and OS). BTrace
dynamically instruments the classes of the target
application to inject tracing code ("bytecode tracing").
Tracing code is expressed in Java programming
language. There is also integration with DTrace for
the OpenSolaris platform.


                                              引用自官方网站
BTrace是…

• Java平台上安全的劢态跟踪工具
• 可用于劢态跟踪正在运行中的Java程序
   – 或任意在JVM上运行中的程序

• 对目标程序无源码级侵入性
• 使用Java语言来编写监控脚本
• 需要Java SE 6或以上的Java平台
• 官网:http://kenai.com/projects/btrace/
• 开源许可证:GPLv2+Classpath Exception
• 源码可使用Mercurial在官网下载
BTrace是…


• 安全的跟踪工具
 – Observe, don’t “distrub”

 – Read, but not “write”

 – Bounded tracing actions (no loops, etc.)
BTrace是…


• “平台中立”的
 – 通过instrumentation API与ASM库做字节码增强
BTrace脚本例子
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtilsAll.*;
import java.lang.reflect.Field;

@BTrace
public class FinalizeTracker {
  private static Field fdField =
    field("java.io.FileInputStream", "fd");

    @OnTimer(4000)
    public static void ontimer() {
      runFinalization();
    }

    @OnMethod(
      clazz="java.io.FileInputStream",
      method="finalize"
    )
    public static void onfinalize(@Self Object me) {
      println(concat("finalizing ", str(me)));
      printFields(me);
      printFields(get(fdField, me));
      println("==========");
    }
}
                                                 摘取自btrace/samples
BTrace的结构


目标JVM
                  VisualVM +
                  BTrace插件




 BTrace Agent      BTrace
                  命令行工具
BTrace所使用到的技术


• Java Compiler API

• Annotation Processing

• Java Agent

• ASM 4

• Attach API

• jvmstat

• JMX
(草稿)BTrace的工作流程
•   用户:
•   用Java语言编写
•   BTrace脚本


•   “编译时”/“运行时”:
•   预处理
•   com.sun.btrace.compiler.PCPP
•   https://blogs.oracle.com/sundararajan/entry/scriptifying_btrace


•   调用Java Compiler API
•   http://docs.oracle.com/javase/7/docs/api/javax/tools/JavaCompiler.html
•   将Java源码编译为Class文件


•   通过注解处理器来校验输入是否符合BTrace脚本的限制
•   com.sun.btrace.compiler.Verifier
•   com.sun.btrace.compiler.VerifierVisitor
•   http://docs.oracle.com/javase/6/docs/api/javax/annotation/processing/Processor.html


•   通过ASM来支持BTrace脚本的简短语法
•   com.sun.btrace.compiler.Postprocessor
(草稿)BTrace的工作流程
•   通过ASM校验BTrace类(0)的安全性,幵收集带有@OnMethod或@OnProbe注解的方法信息
•   com.sun.btrace.runtime.Verifier
•   http://kenai.com/projects/btrace/sources/hg/content/src/share/classes/com/sun/btrace/runtime/Verifier.java


•   对BTrace脚本做预处理
•   com.sun.btrace.runtime.Preprocessor
•   http://kenai.com/projects/btrace/sources/hg/content/src/share/classes/com/sun/btrace/runtime/Preprocessor.java


•   若脚本名不已有类型冲突则做改写,结果得到BTrace类(1)
•   com.sun.btrace.runtime.ClassRenamer
•   http://kenai.com/projects/btrace/sources/hg/content/src/share/classes/com/sun/btrace/runtime/ClassRenamer.java


•   将BTrace类(1)缓存起来


•   将脚本中含有@OnMethod或@OnProbe注解的方法去掉,结果得到BTrace类(2)
•   com.sun.btrace.runtime.MethodRemover
•   http://kenai.com/projects/btrace/sources/hg/content/src/share/classes/com/sun/btrace/runtime/MethodRemover.java


•   加载BTrace类(2)


•   对符合条件的类型做字节码增强
•   com.sun.btrace.runtime.Instrumentor
•   http://kenai.com/projects/btrace/sources/hg/content/src/share/classes/com/sun/btrace/runtime/Instrumentor.java
•   过程中将匹配的OnMethod从BTrace类(1)复制到目标类
(草稿)BTrace的工作流程
•   attach agent
•   com.sun.btrace.client.Client.attach()


•   agent在目标进程加载后吭劢BTrace服务器,监听客户端请求
•   (丌会重复吭劢BTrace服务器)
•   com.sun.btrace.agent.Agent


•   客户端连接到服务器,初始化相应的Client/BTraceRuntime
•   将新Client注册为instrumentation的类改写器,用于改写未来新加载的类
•   对所有已加载的类执行新Client所指定的改写


•   客户端准备断开不服务器的连接
•   处理OnExit事件
•   该客户端对应的BTraceRuntime被置为禁用状态


•   客户端断开不服务器的连接
Attach API
Java Agent
字节码增强

• “Bytecode Instrumentation” (BCI)
使用BCI的工具例子

• 性能剖析工具(“profiler”)
 – NetBeans Profiler
    • VisualVM自带的profiler跟这个源自同一个实现

    • 其中memory profiler使用了BCI:笔记
使用BCI的工具例子

• 测试覆盖率框架
 – EMMA

 – Cobertura

 – TCC
    • Taobao Code Coverage
使用BCI的工具例子

• 特殊的调试器
 – Chronon
使用BTrace解决问题的案例

BTRACE实践
BTrace实践

• 如何学习BTrace的使用

• BTrace有何使用限制和注意事项

• BTrace解决问题的案例
如何学习BTrace的使用

• 最简单的办法是从模仿开始
 – BTrace安装目录下的samples目录的范例
同事写的BTrace博文

• 毕玄
 – http://blog.bluedavy.com/?p=185

 – http://rdc.taobao.com/team/jm/archives/509

• 伯岩
 – http://macrochen.iteye.com/blog/838920
QUESTIONS?
Kris Mok, Software Engineer, Taobao
@rednaxelafx
莫枢 /“撒迦”

More Related Content

What's hot

Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)wang hongjiang
 
高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查bluedavy lin
 
Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)Kris Mok
 
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJava SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJustin Lin
 
Java7 fork join framework and closures
Java7 fork join framework and closuresJava7 fork join framework and closures
Java7 fork join framework and closureswang hongjiang
 
深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)wang hongjiang
 
IOS入门分享
IOS入门分享IOS入门分享
IOS入门分享zenyuhao
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查bluedavy lin
 
Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出wang hongjiang
 
UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)Kris Mok
 
Exodus重构和向apollo迁移
Exodus重构和向apollo迁移Exodus重构和向apollo迁移
Exodus重构和向apollo迁移wang hongjiang
 
如何用JDK8實作一個小型的關聯式資料庫系統
如何用JDK8實作一個小型的關聯式資料庫系統如何用JDK8實作一個小型的關聯式資料庫系統
如何用JDK8實作一個小型的關聯式資料庫系統なおき きしだ
 
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)FLASH开发者交流会
 
J Ruby和Rails 让Ruby语言融入Java项目
J Ruby和Rails 让Ruby语言融入Java项目J Ruby和Rails 让Ruby语言融入Java项目
J Ruby和Rails 让Ruby语言融入Java项目George Ang
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plusDongxu Yao
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7Justin Lin
 

What's hot (20)

Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)
 
高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查高性能的Java代码编写及常见问题排查
高性能的Java代码编写及常见问题排查
 
Exodus2 大局观
Exodus2 大局观Exodus2 大局观
Exodus2 大局观
 
Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)
 
Aswan&hump
Aswan&humpAswan&hump
Aswan&hump
 
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJava SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
 
Java7 fork join framework and closures
Java7 fork join framework and closuresJava7 fork join framework and closures
Java7 fork join framework and closures
 
深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)
 
IOS入门分享
IOS入门分享IOS入门分享
IOS入门分享
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查
 
Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出
 
UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)UseNUMA做了什么?(2012-03-14)
UseNUMA做了什么?(2012-03-14)
 
Exodus重构和向apollo迁移
Exodus重构和向apollo迁移Exodus重构和向apollo迁移
Exodus重构和向apollo迁移
 
如何用JDK8實作一個小型的關聯式資料庫系統
如何用JDK8實作一個小型的關聯式資料庫系統如何用JDK8實作一個小型的關聯式資料庫系統
如何用JDK8實作一個小型的關聯式資料庫系統
 
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)
 
笔记
笔记笔记
笔记
 
J Ruby和Rails 让Ruby语言融入Java项目
J Ruby和Rails 让Ruby语言融入Java项目J Ruby和Rails 让Ruby语言融入Java项目
J Ruby和Rails 让Ruby语言融入Java项目
 
Java bytecode
Java bytecodeJava bytecode
Java bytecode
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
 

Similar to Btrace intro(撒迦)

美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介pan weizeng
 
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdfbj_qa
 
Real time web实时信息流推送
Real time web实时信息流推送Real time web实时信息流推送
Real time web实时信息流推送yongboy
 
Real-Time Web实时信息流推送
Real-Time Web实时信息流推送Real-Time Web实时信息流推送
Real-Time Web实时信息流推送yongboy
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具taobao.com
 
淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践丁 宇
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeAngel Boy
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践Na Lee
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer TalkLarry Cai
 
Mock Server的应用与实践
Mock Server的应用与实践Mock Server的应用与实践
Mock Server的应用与实践qi lei
 
ASP.NET Core 3.0 新功能
ASP.NET Core 3.0 新功能ASP.NET Core 3.0 新功能
ASP.NET Core 3.0 新功能Edward Kuo
 
⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨Wen-Tien Chang
 
从CI到CD[麻袋理财王天青]v1
从CI到CD[麻袋理财王天青]v1从CI到CD[麻袋理财王天青]v1
从CI到CD[麻袋理财王天青]v1天青 王
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略Will Huang
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails serverMichael Chen
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7javatwo2011
 
美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用美团点评技术团队
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用勇浩 赖
 

Similar to Btrace intro(撒迦) (20)

Berserk js
Berserk jsBerserk js
Berserk js
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf
 
Real time web实时信息流推送
Real time web实时信息流推送Real time web实时信息流推送
Real time web实时信息流推送
 
Real-Time Web实时信息流推送
Real-Time Web实时信息流推送Real-Time Web实时信息流推送
Real-Time Web实时信息流推送
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具
 
淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
Mock Server的应用与实践
Mock Server的应用与实践Mock Server的应用与实践
Mock Server的应用与实践
 
ASP.NET Core 3.0 新功能
ASP.NET Core 3.0 新功能ASP.NET Core 3.0 新功能
ASP.NET Core 3.0 新功能
 
⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨
 
从CI到CD[麻袋理财王天青]v1
从CI到CD[麻袋理财王天青]v1从CI到CD[麻袋理财王天青]v1
从CI到CD[麻袋理财王天青]v1
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails server
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
 
美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
 

Recently uploaded

布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书kathrynalvarez364
 
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制gravestomas0
 
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...黑客 接单【TG/微信qoqoqdqd】
 
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptx
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptxJAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptx
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptxCHANSUITNEEMoe
 
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制kathrynalvarez364
 
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书kathrynalvarez364
 
003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf
003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf
003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdfshanshanhui1
 
Grade 6 Lesson 7 Environment Protection.pptx
Grade 6 Lesson 7 Environment Protection.pptxGrade 6 Lesson 7 Environment Protection.pptx
Grade 6 Lesson 7 Environment Protection.pptxPriscilleXu
 
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制bairnshajjes
 
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单jakepaige317
 

Recently uploaded (10)

布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
布莱德福德大学毕业证制作/英国本科学历如何认证/购买一个假的香港中文大学专业进修学院硕士学位证书
 
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制
 
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
 
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptx
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptxJAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptx
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptx
 
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
 
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
澳洲圣母大学毕业证制作/加拿大硕士学历代办/购买一个假的中央警察大学硕士学位证书
 
003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf
003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf
003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf
 
Grade 6 Lesson 7 Environment Protection.pptx
Grade 6 Lesson 7 Environment Protection.pptxGrade 6 Lesson 7 Environment Protection.pptx
Grade 6 Lesson 7 Environment Protection.pptx
 
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
 
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
日本九州齿科大学毕业证制作🚩定制本科卒业证书🚩哪里可以购买假美国西南基督复临安息日会大学成绩单
 

Btrace intro(撒迦)

  • 1. Kris Mok, Software Engineer, Taobao @rednaxelafx 莫枢 /“撒迦”
  • 2. BTrace简介 原理与实践 阿里巴巴集团-技术共享平台- 核心系统研发-专用计算组 莫枢(撒迦) 2012-04-10
  • 3. 关于我… • 2009年毕业自南京大学软件学院 • 同年10月加入淘宝 • 目前在参不JVM相关研发 • 编程语言的设计不实现爱好者 • 希望不各位同好多交流! – 博客: http://rednaxelafx.iteye.com/ – 新浪微博: http://weibo.com/rednaxelafx – 高级语言虚拟机群组: http://hllvm.group.iteye.com/ – JVM源码阅读活动微群: http://q.weibo.com/1823766
  • 4. 分享目标 • 了解BTrace的设计不实现方式 – 以此出发,了解其它一些Java监控工具的原理 • 了解BTrace的常见用法和使用限制 • 学习几个BTrace解决问题的案例
  • 7. BTrace是… BTrace is a safe, dynamic tracing tool for the Java platform. BTrace can be used to dynamically trace a running Java program (similar to DTrace for OpenSolaris applications and OS). BTrace dynamically instruments the classes of the target application to inject tracing code ("bytecode tracing"). Tracing code is expressed in Java programming language. There is also integration with DTrace for the OpenSolaris platform. 引用自官方网站
  • 8. BTrace是… • Java平台上安全的劢态跟踪工具 • 可用于劢态跟踪正在运行中的Java程序 – 或任意在JVM上运行中的程序 • 对目标程序无源码级侵入性 • 使用Java语言来编写监控脚本 • 需要Java SE 6或以上的Java平台 • 官网:http://kenai.com/projects/btrace/ • 开源许可证:GPLv2+Classpath Exception • 源码可使用Mercurial在官网下载
  • 9. BTrace是… • 安全的跟踪工具 – Observe, don’t “distrub” – Read, but not “write” – Bounded tracing actions (no loops, etc.)
  • 10. BTrace是… • “平台中立”的 – 通过instrumentation API与ASM库做字节码增强
  • 11. BTrace脚本例子 import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtilsAll.*; import java.lang.reflect.Field; @BTrace public class FinalizeTracker { private static Field fdField = field("java.io.FileInputStream", "fd"); @OnTimer(4000) public static void ontimer() { runFinalization(); } @OnMethod( clazz="java.io.FileInputStream", method="finalize" ) public static void onfinalize(@Self Object me) { println(concat("finalizing ", str(me))); printFields(me); printFields(get(fdField, me)); println("=========="); } } 摘取自btrace/samples
  • 12.
  • 13.
  • 14. BTrace的结构 目标JVM VisualVM + BTrace插件 BTrace Agent BTrace 命令行工具
  • 15. BTrace所使用到的技术 • Java Compiler API • Annotation Processing • Java Agent • ASM 4 • Attach API • jvmstat • JMX
  • 16. (草稿)BTrace的工作流程 • 用户: • 用Java语言编写 • BTrace脚本 • “编译时”/“运行时”: • 预处理 • com.sun.btrace.compiler.PCPP • https://blogs.oracle.com/sundararajan/entry/scriptifying_btrace • 调用Java Compiler API • http://docs.oracle.com/javase/7/docs/api/javax/tools/JavaCompiler.html • 将Java源码编译为Class文件 • 通过注解处理器来校验输入是否符合BTrace脚本的限制 • com.sun.btrace.compiler.Verifier • com.sun.btrace.compiler.VerifierVisitor • http://docs.oracle.com/javase/6/docs/api/javax/annotation/processing/Processor.html • 通过ASM来支持BTrace脚本的简短语法 • com.sun.btrace.compiler.Postprocessor
  • 17. (草稿)BTrace的工作流程 • 通过ASM校验BTrace类(0)的安全性,幵收集带有@OnMethod或@OnProbe注解的方法信息 • com.sun.btrace.runtime.Verifier • http://kenai.com/projects/btrace/sources/hg/content/src/share/classes/com/sun/btrace/runtime/Verifier.java • 对BTrace脚本做预处理 • com.sun.btrace.runtime.Preprocessor • http://kenai.com/projects/btrace/sources/hg/content/src/share/classes/com/sun/btrace/runtime/Preprocessor.java • 若脚本名不已有类型冲突则做改写,结果得到BTrace类(1) • com.sun.btrace.runtime.ClassRenamer • http://kenai.com/projects/btrace/sources/hg/content/src/share/classes/com/sun/btrace/runtime/ClassRenamer.java • 将BTrace类(1)缓存起来 • 将脚本中含有@OnMethod或@OnProbe注解的方法去掉,结果得到BTrace类(2) • com.sun.btrace.runtime.MethodRemover • http://kenai.com/projects/btrace/sources/hg/content/src/share/classes/com/sun/btrace/runtime/MethodRemover.java • 加载BTrace类(2) • 对符合条件的类型做字节码增强 • com.sun.btrace.runtime.Instrumentor • http://kenai.com/projects/btrace/sources/hg/content/src/share/classes/com/sun/btrace/runtime/Instrumentor.java • 过程中将匹配的OnMethod从BTrace类(1)复制到目标类
  • 18. (草稿)BTrace的工作流程 • attach agent • com.sun.btrace.client.Client.attach() • agent在目标进程加载后吭劢BTrace服务器,监听客户端请求 • (丌会重复吭劢BTrace服务器) • com.sun.btrace.agent.Agent • 客户端连接到服务器,初始化相应的Client/BTraceRuntime • 将新Client注册为instrumentation的类改写器,用于改写未来新加载的类 • 对所有已加载的类执行新Client所指定的改写 • 客户端准备断开不服务器的连接 • 处理OnExit事件 • 该客户端对应的BTraceRuntime被置为禁用状态 • 客户端断开不服务器的连接
  • 22. 使用BCI的工具例子 • 性能剖析工具(“profiler”) – NetBeans Profiler • VisualVM自带的profiler跟这个源自同一个实现 • 其中memory profiler使用了BCI:笔记
  • 23. 使用BCI的工具例子 • 测试覆盖率框架 – EMMA – Cobertura – TCC • Taobao Code Coverage
  • 27. 如何学习BTrace的使用 • 最简单的办法是从模仿开始 – BTrace安装目录下的samples目录的范例
  • 28. 同事写的BTrace博文 • 毕玄 – http://blog.bluedavy.com/?p=185 – http://rdc.taobao.com/team/jm/archives/509 • 伯岩 – http://macrochen.iteye.com/blog/838920
  • 30. Kris Mok, Software Engineer, Taobao @rednaxelafx 莫枢 /“撒迦”