Arthas 开源一周年,GitHub Star 16 K ,我们一直在坚持什么?

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
性能测试 PTS,5000VUM额度
简介: 缘起最近看到一个很流行的标题,《开源XX年,star XXX,我是如何坚持的》。看到这样的标题,忽然发觉 Arthas 从 2018 年 9 月开源以来,刚好一年了,正好在这个秋高气爽的时节做下总结和回顾。

缘起

最近看到一个很流行的标题,《开源XX年,star XXX,我是如何坚持的》。
看到这样的标题,忽然发觉 Arthas 从 2018 年 9 月开源以来,刚好一年了,正好在这个秋高气爽的时节做下总结和回顾。
lADPDgQ9rJLi7EvNATjNA7Q_948_312_jpg_620x10000q90g

Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。

Github:https://github.com/alibaba/arthas[1]
文档:https://alibaba.github.io/arthas[2]

回顾 Arthas Star 数的历史,一直保持快速增长,目前已经突破 16 K。
lALPDgQ9rJLi7E3NBQTNB_o_2042_1284_png_620x10000q90g
Arthas Github Star历史曲线

感谢用户的支持,既是压力也是动力。在过去开源的一年里, Arthas 发布了 7 个 Release 版本,我们一直坚持三点:

  • 持续改进易用性
  • 持续增加好用的命令
  • 从开源社区中获取力量,回报社区

持续改进易用性

Arthas 一直把易用性放在第一位,在开源之后,我们做了下面的改进:

  • 开发 arthas boot ,支持 Windows/Linux/Mac 统一体验
  • 丝滑的自动补全,参考了 jshell 的体验
  • 高效的历史命令匹配, Up/Down 直达
  • 改进类搜索匹配功能,更好支持 lambda 和内部类
  • 完善重定向机制
  • 支持 JDK 9/10/11
  • 支持 Docker
  • 支持 rpm/deb 包安装

尽管我们在易用性下了很大的功夫,但是发现很多时候用户比较难入门,因此,我们参考了 k8s 的 Interactive Tutorial ,推出了 Arthas 的在线教程:

  • Arthas 基础教程[3]
  • Arthas 进阶教程[4]

通过基础教程,可以在交互终端里一步步入门,通过进阶教程可以深入理解 Arthas 排查问题的案例。

另外,为了方便用户大规模部署,我们实现了 tunnel server 和用户数据回报功能:
增加 tunnel server ,统一管理 Agent 连接
增加用户数据回报功能,方便做安全管控

持续增加好用的命令

Arthas 号称是 Java 应用诊断利器,那么我们自己要对得起这个口号。在开源之后, Arthas 持续增加了 10 多个命令。

  • ognl 命令任意代码执行
  • mc 线上内存编译器
  • redefine 命令线上热更新代码
  • logger 命令一键查看应用里的所有 logger 配置
  • sysprop 查看更新 System Properties
  • sysenv 查看环境变量
  • vmoption 查看更新 VM option
  • logger 查看 logger 配置,更新 level
  • mbean 查看 JMX 信息
  • heapdump 堆内存快照

下面重点介绍两个功能。

jad/mc/redefine 一条龙热更新线上代码

以 Arthas 在线教程 里的 UserController 为例:
1、使用 jad 反编译代码

jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java

2、使用 vim 编译代码

当 user id 小于 1 时,也正常返回,不抛出异常:

    @GetMapping("/user/{id}")
    public User findUserById(@PathVariable Integer id) {
        logger.info("id: {}" , id);

        if (id != null && id < 1) {
            return new User(id, "name" + id);
            // throw new IllegalArgumentException("id < 1");
        } else {
            return new User(id, "name" + id);
        }
    }

3、使用 mc 命令编译修改后的 UserController.java

$ mc /tmp/UserController.java -d /tmp
Memory compiler output:
/tmp/com/example/demo/arthas/user/UserController.class
Affect(row-cnt:1) cost in 346 ms

4、使用 redefine 命令,因为可以热更新代码

$ redefine /tmp/com/example/demo/arthas/user/UserController.class
redefine success, size: 1

通过 logger 命令查看配置,修改 level

在网站压力大的时候(比如双 11 ),有个缓解措施就是把应用的日志 level 修改为 ERROR 。那么有两个问题:

  • 复杂应用的日志系统可能会有多个,那么哪个日志系统配置真正生效了?
  • 怎样在线上动态修改 logger 的 level ?
    通过 logger 命令,可以查看应用里 logger 的详细配置信息,比如 FileAppender输出的文件, AsyncAppender 是否 blocking 。
[arthas@2062]$ logger
 name                                   ROOT
 class                                  ch.qos.logback.classic.Logger
 classLoader                            sun.misc.Launcher$AppClassLoader@2a139a55
 classLoaderHash                        2a139a55
 level                                  INFO
 effectiveLevel                         INFO
 additivity                             true
 codeSource                             file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar
 appenders                              name            CONSOLE
                                        class           ch.qos.logback.core.ConsoleAppender
                                        classLoader     sun.misc.Launcher$AppClassLoader@2a139a55
                                        classLoaderHash 2a139a55
                                        target          System.out
                                        name            APPLICATION
                                        class           ch.qos.logback.core.rolling.RollingFileAppender
                                        classLoader     sun.misc.Launcher$AppClassLoader@2a139a55
                                        classLoaderHash 2a139a55
                                        file            app.log
                                        name            ASYNC
                                        class           ch.qos.logback.classic.AsyncAppender
                                        classLoader     sun.misc.Launcher$AppClassLoader@2a139a55
                                        classLoaderHash 2a139a55
                                        blocking        false
                                        appenderRef     [APPLICATION]

也可以在线修改 logger 的 level :

[arthas@2062]$ logger --name ROOT --level debug
update logger level success.

从开源社区中获取力量,回报社区

感谢 67 位 Contributors

Arthas 开源以来,一共有 67 位 Contributors ,感谢他们贡献的改进:

Arthas Contributors
社区提交了一系列的改进,下面列出一些点(不完整):

  • 翻译了大部分英文文档的
  • trace 命令支持行号
  • 打包格式支持 rpm/deb
  • 改进命令行提示符为 arthas@pid
  • 改进对 windows 的支持
  • 增加 mbean 命令
  • 改进 webconsole 的体验

另外,有 83 个公司/组织登记了他们的使用信息,欢迎更多的用户来登记:

lALPDgQ9rJLi7FHNAeTNBt4_1758_484_png_620x10000q90g

洐生项目

基于 Arthas ,还产生了一些洐生项目,下面是其中两个:

  • Bistoury : 去哪儿网开源的集成了 Arthas 的项目
  • arthas-mvel : 一个使用 MVEL 脚本的 fork

用户案例分享

广大用户在使用 Arthas 排查问题过程中,分享了很多排查过程和心得,欢迎大家来分享。

lALPDgQ9rJLi7FjNA9rNByY_1830_986_png_620x10000q90g

回馈开源

Arthas 本身使用了很多开源项目的代码,在开源过程中,我们给 netty, ognl, cfr 等都贡献了改进代码,回馈上游。

后记

在做 Arthas 宣传小册子时, Arthas 的宣传语是:

“赠人玫瑰之手,经久犹有余香”

希望 Arthas 未来能帮助到更多的用户解决问题,也希望广大的开发者对 Arthas 提出更多的改进和建议。

参考资料

[1]Arthas Github: https://github.com/alibaba/arthas

[2]Arthas 文档: https://alibaba.github.io/arthas
[3]Arthas基础教程:
https://alibaba.github.io/arthas/arthas-tutorials?language=cn&id=arthas-basics
[4]Arthas进阶教程:
https://alibaba.github.io/arthas/arthas-tutorials?language=cn&id=arthas-advanced

相关文章
|
5天前
|
编解码 人工智能 自然语言处理
MaskGCT:登上GitHub趋势榜榜首的TTS开源大模型
近日,香港中文大学(深圳)联手趣丸科技推出了新一代大规模声音克隆TTS模型——MaskGCT。一起看看该模型的一些表现吧!
|
24天前
|
数据采集 应用服务中间件 Go
开源的键鼠共享工具「GitHub 热点速览」
开源的键鼠共享工具「GitHub 热点速览」
|
3月前
|
人工智能 Rust JavaScript
Github 2024-08-26 开源项目周报Top15
根据Github Trendings的统计,本周共有15个项目上榜。以下是按开发语言汇总的项目数量:Python项目8个,TypeScript、C++ 和 Rust 项目各2个,Jupyter Notebook、Shell、Swift 和 Dart 项目各1个。其中,RustDesk 是一款用 Rust 编写的开源远程桌面软件,可作为 TeamViewer 的替代品;Whisper 是一个通用的语音识别模型,基于大规模音频数据集训练而成;初学者的生成式人工智能(第2版)则是由微软提供的18门课程,教授构建生成式AI应用所需的知识。
113 1
|
3月前
|
Rust Dart 前端开发
Github 2024-08-19 开源项目周报Top15
根据Github Trendings的统计,本周(2024年8月19日统计)共有15个项目上榜。按开发语言分类,上榜项目数量如下:Python项目最多,有7项;其次是JavaScript和TypeScript,各有3项;Dart有2项;HTML、PowerShell、Clojure和C++各1项。此外,还介绍了多个热门项目,包括Bootstrap 5、RustDesk、ComfyUI、易采集、Penpot等,涵盖了Web开发、远程桌面、自动化测试、设计工具等多个领域。
100 1
|
3月前
|
JavaScript 前端开发 Go
Github 2024-08-12 开源项目周报 Top14
本周Github Trendings共有14个项目上榜,按开发语言汇总如下:Python项目7个,TypeScript项目5个,C项目2个,JavaScript项目2个,Go和Batchfile项目各1个。其中亮点包括开发者职业成长指南、Windows激活工具、ComfyUI图形界面、AFFiNE知识库、易采集可视化爬虫等项目,涵盖多种实用工具和开源平台。
96 1
|
6月前
|
Arthas 监控 Java
Java 诊断利器 Arthas使用
Java 诊断利器 Arthas使用
200 0
|
6月前
|
Arthas 监控 Java
Arthas 可以用于监控和诊断在 Windows 系统下部署的 Tomcat 服务
Arthas 可以用于监控和诊断在 Windows 系统下部署的 Tomcat 服务
779 2
|
Arthas 监控 Java
开源Java诊断工具Arthas:开篇之watch实战
还在为排查Java程序线上问题头痛吗,看我们用阿里开源的诊断神器 Arthas 来帮您
495 1
|
12月前
|
Arthas Dubbo Java
Alibaba Java诊断工具Arthas查看Dubbo动态代理类
Alibaba Java诊断工具Arthas查看Dubbo动态代理类
105 0
|
5月前
|
Arthas 测试技术 Java
一文带你快速了解 Java 线上问题快速诊断神器 Arthas
【6月更文挑战第1天】一文带你快速了解 Java 线上问题快速诊断神器 Arthas
257 3