天天看点

jvm-sanbox详解--汇总篇

介绍

jvm-sanbox是阿里出的基于 java.lang.instrument包做的一款工具

框架设计目标为:(摘自阿里云溪社区文章)

  • 故障演练:在运行前,抛出异常或增加运行时间,即:干预方法的执行顺序和改变返回值;
  • 强弱依赖梳理:系统运行时,实时记录系统的对外调用情况,即:感知方法的入参和返回值;
  • 录制回放:运行时,记录方法的入参和返回值,回放时,不真实对外调用,而是直接返回录制时的返回值。即:感知方法入参和返回值,干预方法执行顺序,改变返回值;
  • 精准回归:获取每个请求的行调用链路,根据行调用链路进行场景去重,根据代码改动的情况和行调用链路确定需要回归范围,即:运行时行链路感知。

使用手册

源码git地址:https://github.com/alibaba/jvm-sandbox

使用手册:源码中wiki很详细,不再赘述

jvmsandbox的前世今生:https://yq.aliyun.com/articles/707736

基本原理

  1. 无侵入式attach到jvm上
  2. 按照框架规则编写搜索要增强的类,框架会自动注入增强类/方法—偷天换日
  3. 在运行代码的过程中,新的请求运行增强后的类(被增强重新加载),这个增强后的类中由于框架增加了许多框架级别的代码,所以可以通知打印出各种不同的事件,甚至直接改变代码执行流程(参考源码中 修复一个坏掉的钟表例子)

这里放一张官方给出的架构图,大神们看到这张图估计就已经明白作者的设计思想了,如果不懂,且听我慢慢分解

jvm-sanbox详解--汇总篇

设计思想(更新中…)

  1. sandbox快速使用手册
  2. 如何支持agent方式和attach方式启动?
  3. 编写的模块如何支持SPI模式?
  4. 字节码是如何增强的?
  5. 事件是如何监听通知到的?
  6. 源码示例坏掉的钟是如何被修复的?

继续阅读