Skip to content

Releases: alibaba/jvm-sandbox

[email protected]

26 Jan 17:51
Compare
Choose a tag to compare

SANDBOX小版本发布

1.4.0版本二进制包下载

变更说明

  1. 支持增强NATIVE方法,但限制在JDK[1.8,12]中启用 #281
  2. 支持JDK17 #347
  3. 优化类匹配性能 #292 ,需要升级sandbox-api1.4.0
  4. 修复已知BUG #328 #352 #385

兼容声明

  1. 整体工程从JDK1.6迁移到JDK1.8,之前的JDK版本将不会再支持。这一点也是充分参考了不同JVM版本的市场份额和基于1.6的代码维护成本过高做了权衡。仍然在使用JDK1.6版本的用户请继续使用之前的沙箱版本。

  2. 增强NATIVE方法。因受到沙箱实现方案的限制,对JVM版本也有对应的限制要求。NATIVE方法增强将会在JDK[1.8,12]中启用,其他版本不开放。不排除后续调整NIATVE方法增强方案的改变后重新支持的可能。

    需要增强java.lang.System#java.lang.System#currentTimeMillis()方法的,请务必参考FAQ建议:沙箱如何增强JVM固有函数

API

GROUP-ID ARTIFACT-ID VERSION
com.alibaba.jvm.sandbox sandbox-api 1.4.0
com.alibaba.jvm.sandbox sandbox-module-starter 1.4.0

[email protected]

07 Jul 06:25
d0df6b8
Compare
Choose a tag to compare

SANDBOX问题修复版本

  • 1.3.3版本二进制包下载

    修改类加载时间,将类加载时机提前到init阶段,同时恢复addTransformer时机

  • 不兼容声明

  • API

    GROUP-ID ARTIFACT-ID VERSION
    com.alibaba.jvm.sandbox sandbox-api 1.3.1
    com.alibaba.jvm.sandbox sandbox-module-starter 1.3.1

[email protected]

17 Jun 09:25
Compare
Choose a tag to compare

SANDBOX问题修复版本

  • 1.3.2版本二进制包下载

  • 不兼容声明

  • API

    GROUP-ID ARTIFACT-ID VERSION
    com.alibaba.jvm.sandbox sandbox-api 1.3.1
    com.alibaba.jvm.sandbox sandbox-module-starter 1.3.1

[email protected]

11 Jan 21:43
Compare
Choose a tag to compare

SANDBOX问题修复版本

  • 1.3.1版本二进制包下载

  • 功能特性

    • 修复:

      1. 解决 #238 提出的:当环境变量$USER不存在时,使用whoami代替
      2. 修复 #242 提出的:修复在类加载过程中遇到看到Sandbox自己的类情况,规避由此引发的类加载死锁。明确sandbox不能增强以下类
        1. sandbox自身的类
        2. 被sandbox的ClassLoader所加载的类
      3. 修复 #256 提出的:EventWatchBuilder对AdviceListener存在匹配歧义风险,模块开发可能会通过这个不严谨的API在利用AdviceListener观察事件中漏指定掉必要的观察事件。
      4. 修复Advice.getBehavior()因为懒加载遇到BeforeEvent对象复用时,导致信息被污染的BUG
      5. 修复 #253 提出的:AOP增强两个嵌套调用的方法时会引起事件错位的问题
      6. 解决 #250 提出的:如果你想观察JVM底层基础类(比如String.class)在Sandbox操作过程中会产生大量的类加载行为,引起公共基础类被大量观察,从而影响性能。
  • 不兼容声明

  • API

    GROUP-ID ARTIFACT-ID VERSION
    com.alibaba.jvm.sandbox sandbox-api 1.3.1
    com.alibaba.jvm.sandbox sandbox-module-starter 1.3.1

[email protected]

12 Dec 04:00
Compare
Choose a tag to compare

SANDBOX探针调用从反射切换为接口调用提升容器性能

  • 1.3.0版本二进制包下载

  • 功能特性

    • 优化:

      1. 改变Spy调用采用反射的机制,使用SpyHandler的接口调用,提升性能

        因为改变了sandbox-spy包的行为,所以本次升级必须要重启目标JVM

      2. 降低sandbox.sh脚本对环境要求的兼容性,当环境不匹配时更多主动的是报错而不是尝试兼容

    • 修复:

      1. 解决 #217 提出的RoutingClassLoader死锁
      2. 解决 #203 提出的attach和agent两种不同模式下对加载类异常的处理不同,会导致这些类无法被增强的BUG
      3. 解决 #236 提出的API向下兼容性问题
      4. 解决某些情况下卸载SANDBOX容器时会发生空指针的BUG,导致卸载不成功
    • 新增:

      1. Module中Command注解的方法入参,新增java.io.OutputStream类型。

        但不能和java.io.PrintWriter同时声明,否则运行会报错!

  • 不兼容声明

    因为改变了sandbox-spy包的行为,所以本次升级必须要重启目标JVM

  • API

    GROUP-ID ARTIFACT-ID VERSION
    com.alibaba.jvm.sandbox sandbox-api 1.3.0
    com.alibaba.jvm.sandbox sandbox-module-starter 1.3.0

[email protected]

27 Sep 08:29
Compare
Choose a tag to compare

BUGFIX版本

  • 1.2.2版本二进制包下载

  • 功能特性

    • 新增:

      1. Advice可以获取到对应的ClassLoader #161
    • 修复:

      1. 修复并发搜索类时导致内存泄漏问题

        原有的GaLRUCache采用的是LinkedHashMap实现,会在并发情况下搜索模块出现内存泄漏,导致FG。并发的场景是JVM自己的类加载触发类搜索和module自己增强时主动搜索情况。修复方案是使用Guava的LRU替换自己实现的GaLRUCache。

      2. 懒加载化Advice结构部分重量级字段的获取,提升AdviceListener的性能和稳定性

      3. 优化类搜索、事件处理等关键路径上使用String.format()导致性能开销过大的问题 #209

      4. 修复部分情况下BootstrapClassLoader加载的类无法正确被解析的BUG #168 #189

      5. 修复properties配置文件配置的ip/port不生效 #143

      6. 优化@command@http的注解,帮助大家规避掉老版本兼容问题 #200

      7. 修复查找JVM_HOME一定概率出现问题 #141

  • 不兼容声明

  • API

[email protected]

07 Apr 13:22
Compare
Choose a tag to compare

sandbox主目录下增加user module默认启动目录

  1. 新增: sandbox主目录下新增sandbox-module子目录,作为用户module的默认启动目录。-f,-F可刷新该目录下的模块。同时兼容sandbox.properties中指定user_module=~/.sandbox-module。
  • 不兼容声明
  • API

[email protected]

02 Feb 15:31
Compare
Choose a tag to compare

JVM-SANDBOX-DEVELOP-20181227日常问题修复

  • 1.2.0版本二进制包下载

  • 功能特性

    1. 新增: sandbox-api增加ModuleJarUnLoadSpi.java,允许在ModuleJar文件被卸载的时候执行回调,可以在这个回调释放Jar包加载时所申请的资源。(例如:logback的线程池等)

    2. 新增: sandbox-api增加Command.java标注,用于替代@Http标注。@Command标注的好处在于他可以让你摆脱对javax.servlet的依赖。@Command标注在方法上,支持三类入参类型

      • URL的单值参数转换成Map:java.util.Map<String,String>
      • URL的多值参数转换成Map:java.util.Map<String,String[]>
      • 文本输出:java.io.PrintWriter
    3. 废弃: sandbox-api将废弃一些高危险类、低使用类

      • 废弃WebSocketEventListenerFactoryThreadSafeEventListener,使用的人太少,增加复杂度
      • 废弃@Http标注,变更为@Command标注
      • 废弃Sentry,不规范的使用ThreadLocal容易引起内存泄漏,推荐自己管理或者使用Advice的attach机制
      • 废弃EventMonitorsandbox.properties中关于对象池的配置,因为已经废弃了对象池
      • 废弃sandbox-api模块对javax.servlet的依赖,因兼容性的需求所以maven中的依赖尚未废除,但你确定用@Command标注代替@Http标注之后,可以在依赖中exclusion掉
        <dependency>
          <groupId>com.alibaba.jvm.sandbox</groupId>
          <artifactId>sandbox-api</artifactId>
          <scope>provided</scope>
          <exclusions>
              <exclusion>
                  <groupId>javax.servlet</groupId>
                  <artifactId>servlet-api</artifactId>
              </exclusion>
          </exclusions>
        </dependency>
    4. 优化: 废弃对内存、性能影响巨大的对象池的实现

      沙箱原本依靠对象池来解决运行过程中产生的大量Event对象问题,希望能通过这样的机制降低新声代的压力。但实际使用过程中我们发现:

      • 对象池大小不好控制
      • 对象池分配/归还对象对性能影响巨大

      所以在这个版本中,我们将全局对象池的实现变更为:给每一个线程分配固定数量的Event

    5. 优化: Spy.SelfCallBarrier对象的锁机制 #109

    6. 优化: 支持JDK11 #136

    7. 修复: 沙箱的类分析机制会在SpringBoot触发java.lang.LinkageError异常 #133

    8. 修复: 沙箱在卸载时会引起“空指针”的问题

    9. 修复: 沙箱在卸载/重新加载时会引起“对象转换异常”问题 #125

    10. 修复: 修复沙箱因使用ThreadLocal不当引起内存泄漏问题 #123 #108

    11. 修复: 修复沙箱因堆栈使用不当引起堆栈错位问题 #123 #117

    12. 修复: 在OpenJDK8下JIT触发崩溃的问题 #130

    13. 其他修复: #126 #128 #121 #118

  • 不兼容声明

  • API

    GROUP-ID ARTIFACT-ID VERSION
    com.alibaba.jvm.sandbox sandbox-api 1.2.0
    com.alibaba.jvm.sandbox sandbox-module-starter 1.2.0

[email protected]

11 Dec 09:35
Compare
Choose a tag to compare

JVM-SANDBOX-DEVELOP-20181212日常问题修复

  • 1.1.2版本二进制包下载

  • 功能特性

    1. 增强:EventWatchBuilder支持正则表达式模式
    2. 优化:日志框架进行优化
    3. 修复:修复问题 #117

      在AdviceAdapterListener 中的 before 阶段直接使用 returnImmediately 方法修改返回值导致内存溢出

    4. 修复:修复重复查询user_module的BUG(稍微影响启动性能)
  • 不兼容声明

  • API

    GROUP-ID ARTIFACT-ID VERSION
    com.alibaba.jvm.sandbox sandbox-api 1.1.2
    com.alibaba.jvm.sandbox sandbox-module-starter 1.1.2

[email protected]

08 Nov 05:21
Compare
Choose a tag to compare

JVM-SANDBOX-DEVELOP-20181027日常问题修复

  • 1.1.1版本二进制包下载

  • 功能特性

    1. 增强:ASM框架升级到ASM7,为下一个版本适应JDK8的字节码做准备

    2. 修复:校准ClassStructureImplByJDKClassStructureImplByAsm的实现逻辑,修复

      • 内部类的getAccess()方法返回错误的属性
      • 修复两个类对内部枚举类型数组getSignCode()时返回的结果存在差异 #107
      • 修复getFamilyInterfaceClassStructures()返回时忘记考虑获取家族接口类结构时忘记考虑自身父类的情况
      • 补充了ClassStructure相关的测试用例
    3. 修复:修复容器shutdown时没有正确释放所有内存的问题 #108

    4. 增强:模块匹配搜索类时,去掉java.lang.Object的匹配,加速类匹配速度

    5. 增强:添加CI集成测试插件

  • 不兼容声明

  • API

    GROUP-ID ARTIFACT-ID VERSION
    com.alibaba.jvm.sandbox sandbox-api 1.0.16
    com.alibaba.jvm.sandbox sandbox-module-starter 1.0.16