[alibaba/arthas]arthas 4.0 版本的 脚本命令讨论,是用旧的 as.sh/arthas-boot.jar ,还是用 as4.sh/arthas-boot4.jar

2024-07-17 555 views
4

4.0 主要是升级到 jdk8,不再支持 jdk 6/7 。 参考: https://github.com/alibaba/arthas/issues/2530

  • 沿用原来的名称的好处,自然是少了很多工作量,用户习惯不变。
考虑用 as4.sh 新名字的原因
  • 如果直接用原来的 as.sh/arthas-boot.jar ,有小部分用户可能会遇到不兼容问题。 并且原来的脚本可能会拉到 4.0 版本的 arthas。导致原来能用的机器,突然不能用了。会有一定答疑的成本

  • 如果使用 as4.sh/arthas-boot4.jar 的命名,可以保持完全兼容(maven坐标需要更新)。 但需要用户自己切换。

  • 使用 as4.sh/arthas-boot4.jar 的命名可以让用户明确知道使用的是新版本。

  • 目前 arthas 4 版本和 arthas 3.x 版本匹别不大。但后续会有比较大的变化,如果完全切割之后,兼容性的考虑可以少很多

  • 单独 as4.sh/arthas-boot4.jar 的命名,可以让用户在新版本上多测试一段时间

回答

8

那就两个都出呗

7

最好还是保持as.sh & arthas-boot.jar 1、上下游很多内部工具、三方插件默认走 https://arthas.aliyun.com/as.sh or boot.jar 默认更新流程,切换为新版本很多用户无法体验到最新的功能的升级。 2、目前版本的兼容性主要集中在java8以下版本,判断兼容性的代码 集中在 as.sh & boot.jar 启动入口 ,可以将脚本中的兼容性集中处理到 boot.jar 目前代码中维护者一个 最新版本 https://arthas.aliyun.com/api/latest_version ,如果增加一个目前支持Java8以下版本的变量,判断当前环境自动增加参数,走java8以下版本的逻辑。 这里有两个问题

  • 直接下载最新zip包,在当前目录启动,这里要增加一个当前环境和当前目录下的版本是否合格,java6环境,是否是使用java6的包。
  • 历史存量用户兼容性问题,使用最低配版本boot.jar or as.sh java6 环境下使用,自动升级会失败,这种场景只能增加友善提示。 主要问题还是 java6用户基数有多大,自动升级失败答疑如何解决,是否可以将兼容性冗余在arthas-boot 这个启动类中,启动类对于java版本无感。

增加 --use-3.x 类似这种参数

9

是否可以考虑做一个反向的工具。

  • 明确 as3.sh/ arthas-boot3.jar 是 arthas 3版本的。如果用户需要使用,则下载使用。
  • as.sh/arthas-boot.jar 默认使用最新的
7

现在我厂就存在一些"上古"项目. 一台机上 jdk678跑的jvm应有尽有都有 如果在attach前判断目标进程 低于jdk6/7 则用3.0的 新老项目无感知

7

考虑一种兼容性比较好的方案。 arthas-boot 打包为 target jdk6 ,或者是 main 函数是 jdk6 版本的字节码,这样子即使应用使用 jdk 6/7 启动时可以打印出提示。

避免出现用户使用 jdk 6/7 启动 jdk8 jar时出错,又没有提示。

8

使用一样的名字, 但是程序里带上版本号,历史的或者没有版本号的就拉老版本的依赖,新的拉对应版本的依赖。拉下来后文件名字什么都一样的