不忘初心 | Arthas Star突破2.5W,排名Github Alibaba Group第一

735 阅读6分钟

一、Arthas Star突破2.5万啦

Arthas

随着微服务的流行,应用更加轻量和高效,但是带来的困境是线上问题排查越来越复杂困难。传统的Java排查问题,需要重启应用再进行调试,但是重启应用之后现场会丢失,问题难以复现。

因此自2018年9月,阿里巴巴开源了久经考验,深受开发者喜爱的应用诊断利器Arthas。

Arthas通过创新的字节码织入技术,可以在应用无需重启时,查看调用上下文,高效排查问题;结合火焰图,可以直接定位热点,发现性能瓶颈;通过字节码替换,实现在线热更新代码;同时支持黑屏化和白屏化诊断,可以连接诊断大规模的集群。

在2020年5月时,我们做了Arthas Star破2万里的回顾:精益求精 | 开源应用诊断利器 Arthas GitHub Star 突破两万

冬去春又来,转眼间一年过去了,Arthas的Star数突破2.5万了~

下面来回顾Arthas去年的一些数据和工作。

二、Arthas 过去一年的数据

2.1 Arthas Github Star数突破2.5W

arthas-star.png

2.2 Arthas Github Contributors数

Arthas的开源贡献者人数从85增长到119,非常感谢他们的工作:

Arthas贡献者

2.3 Arthas登记公司数从 117增长到151家

过去一年,Arthas 在工商银行、中原银行、朴朴科技、贝壳找房、斗鱼等生产场景落地,欢迎更多用户登记:github.com/alibaba/art…

2.4 Arthas在线教程学习人次: 133,996,学习时长: 51798小时

人均体验时长23分钟以上。

arthas-kata.png

2.5 Arthas zip包月均下载 6.5w 次

上线了Arthas新网站之后,我们统计平均每个月arthas zip包下载 6.5万次。所以保守估计,Arthas平均每个月诊断6W+台机器。

2.6 Arthas在 ATA 年度技术搜索排行第6

阿里内部的技术论坛 ATA 发布年度热搜关键词 top 100,Arthas 作为 Java 诊断神器是唯一进入 top 10 的非集团指定产品。Arthas 在阿里内部的受欢迎程度可见一斑。

arthas-ata.png

三、Arthas 过去一年的工作

在过去的一年里,Arthas发布了19个release版本,做了大量的改进,下面列出一些重点:

  1. 全新的 Bytekit 字节码增强框架
  2. 完整支持HTTP API,所有命令都完成适配
  3. Tenlet/WebSocket/HTTP API 支持统一的鉴权方案
  4. 全新的热更新命令retransform
  5. Tunnel Server支持集群部署,支持查看火焰图,内部上线支持流计算应用
  6. 增加arthas-spring-boot-starter模块,并支持endpoint,用户可以用编程方式引入Arthas
  7. 上线 arthas.aliyun.com 网站,更好服务国内用户

3.1 全新的 Bytekit 字节码增强框架

Github: github.com/alibaba/byt…

Bytekit框架可以通过简洁的注解来实现字节码增强,具体功能点:

  1. 丰富的注入点支持

  2. 动态的Binding

  3. 可编程的异常处理

    比如在函数入口做增强:

        public static class SampleInterceptor {
            @AtEnter(inline = true, suppress = RuntimeException.class, suppressHandler = PrintExceptionSuppressHandler.class)
            public static void atEnter(@Binding.This Object object, 
                    @Binding.Class Object clazz,
                    @Binding.Args Object[] args, 
                    @Binding.MethodName String methodName,
                    @Binding.MethodDesc String methodDesc) {
                System.out.println("atEnter, args[0]: " + args[0]);
            }
    
  4. inline支持

  5. invokeOrigin 技术

    比如在Dubbo Filter里插入APM代码:

    @Instrument(Interface = "org.apache.dubbo.rpc.Filter")
    public abstract class DubboFilter_APM {
        public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
            System.err.println("invoker class: " + this.getClass().getName());
            Result result = InstrumentApi.invokeOrigin();
            return result;
        }
    }
    

通过Bytekit框架,Arthas

  1. 解决了多个watch/trace 命令会重复某个类的问题
  2. 统一使用一个 Transformer,解决了多个增强命令冲突问题
  3. 实现了动态增强功能,通过指定 ListenerId,watch/trace命令可以一起协作

3.2 HTTP API支持

Http API 提供类似RESTful的交互接口,请求和响应均为JSON格式的数据。相对于Telnet/WebConsole的输出非结构化文本数据,Http API可以提供结构化的数据,支持更复杂的交互功能。

3.3 统一鉴权

在今天,应用的安全越来越受到重视。因此,诊断工具在提升诊断效率的同时,也要注意自身的安全性。

因为Arthas增加了auth命令,并且统一了Telnet/WebSocket/HTTP API的鉴权,参考:

3.4 全新的热更新命令retransform

之前,Arthas里的redefine命令已经支持热更新功能,但是容易和jad命令或者其它java agent冲突。因此,我们开发了全新的retransform命令。

retransform 命令和 watch/trace命令等是同一机制下实现的。如果对同一个类执行多个命令,则会经过下面的处理:

retransform 命令 -> watch 命令 -> trace命令

可以看到,retransform 命令执行后,不会影响watch/trace命令。

3.5 Tunnel Server支持集群部署

通过Arthas Tunnel Server/Client 可以远程管理/连接多个Agent。Tunnel Server新增加功能:

  • 支持集群部署,支持redis存储
  • 支持http proxy,查看火焰图

3.6 arthas-spring-boot-starter

通过arthas-spring-boot-starter,用户可以直接以编程方式引入Arthas,结合Tunnel Server,可以轻松实现集群化管理。

3.7 全新的网站 arthas.aliyun.com

之前,Arthas的文档放在github io的域名下,经常访问失败。为了改进访问速度,因此,我们建设了全新网站,用户访问文档和下载Arthas,都更加方便快捷。

四、Arthas有奖征文活动

Arthas征文活动一共办了七期,收到投稿30+篇,下面是一些优秀的文章:

有奖征文活动还在继续,欢迎大家分享~

五、Arthas 规划

去年,我们规划了三个目标:

  • RESTful API支持
  • 全新的字节码框架ByteKit
  • 插件化支持

实际上完成了2.5个,其中插件化支持,我们孵化出全新的 One Java Agent项目来实现。

One Java Agent项目的目标:

  1. 提供插件化支持,统一管理众多的Java Agent
  2. 插件支持install/unstall,需要插件方实现接口
  3. 支持传统的java agent,即已经开发好的java agent

最后回应一下标题,为什么叫不忘初心呢?

从开源到现在,Arthas在Github上一共有 1200 多个Issue,最近我们回收了第一个Issue:

image.png

在不断增强功能的同时,我们一直在持续改进Arthas的易用性。

  • 不断改进帮助文档
  • 上线 arthas.aliyun.com ,改进国内用户访问速度
  • 为大部分命令准备交互式的在线教程

我们相信:赠人玫瑰之手,经久犹有余香,感谢广大用户的支持和喜爱。