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

2023-10-30

缘起

最近看到一个很流行的标题,《开源XX年,star XXX,我是如何坚持的》。

看到这样的标题,忽然发觉Arthas从2018年9月开源以来,刚好一年了,正好在这个秋高气爽的时节做下总结和回顾。

Arthas

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

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

  • 文档:https://alibaba.github.io/arthas[2]

回顾Arthas Star数的历史,一直保持快速增长,目前已经突破16K(数学不好,标题多了个0????)。

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个公司/组织登记了他们的使用信息,欢迎更多的用户来登记:

Arthas Users

洐生项目

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

  • Bistoury: 去哪儿网开源的集成了Arthas的项目

  • arthas-mvel: 一个使用MVEL脚本的fork

用户案例分享

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

Arthas用户案例分享

回馈开源

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

后记

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

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

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

最后是抽奖环节,大家可以转发文章,在公众号后台留言自己和Arthas的故事,或者给Arthas提出建议,奖品是Arthas的卫衣一件:

Arthas卫衣

公众号

欢迎关注横云断岭的专栏,专注Java,Spring Boot,Arthas,Dubbo。

横云断岭的专栏

参考资料

[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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Arthas开源一周年,Github Star 160K,我们一直在坚持什么? 的相关文章

  • KEIL 生成bin文件

    1 首先对于keil5其编译生成的HEX文件 一般通过勾选如下 在进行ISP烧写时 就可以通过传送HEX文件进行烧写 2 对于烧写而言不仅仅可以通过HEX文件进行烧写 还可以通过BIN文件进行烧写 且BIN文件比HEX文件更小 设置BIN文
  • Rust的内存安全三原则:所有权、借用及生命周期

    我们接下来要探讨的概念是Rust的内存安全及其零成本抽象原则的核心 它们让Rust能够在编译期检测程序中内存安全违规 在离开作用域时自动释放相关资源等情况 我们将这些概念称作所有权 借用和生命周期 所有权有点类似核心原则 而借用和生命周期是
  • 时序预测

    时序预测 MATLAB实现2 DCNN卷积神经网络时间序列预测 目录 时序预测 MATLAB实现2 DCNN卷积神经网络时间序列预测 预测效果 基本介绍 研究背景 模型结构 建模流程 程序设计 学习总结 参考资料 预测效果 基本介绍 一种基
  • Dolby与DTS杜比环绕与DTS环绕音响

    转自 http blog sina com cn s blog a15db8ae0101dlz7 html 杜比环绕与DTS环绕具有的相近之处在于它们都是属于有损的数字压缩技术 这种称为 感性的 数据压缩技术是基于人类心理声学上所具备的听音
  • AndroidStudio运行程序时启动虚拟机出现x86 emulation currently requires hardware acceleration!问题解决方法

    这个问题是没有安装intelhaxm android exe这个软件 找到 SDK安装目录 一般在C盘下C Users admini AppData Local Android Sdk extras intel Hardware Accel
  • C++:采用vector实现二分查找及其变种总结

    主要分为六种情况 闭区间 半开区间 中位值在循环之外的半开区间二分查找首个序列 中位值在循环之外的半开区间二分查找末尾序列 以及中位值在循环之外的完全开区间二分查找首个序列和中位值在循环之外的完全开区间二分查找末尾序列 include
  • 微信小游戏开发之四:使用three.js引擎

    一 前言 微信小游戏中最魔性的 跳一跳 就是基于three js 引擎开发的 看这里 不要再让我发邮箱了 源码放到github上了 GitHub地址 请自行下载 二 下载 three min js 打开页面 复制代码到本地 三 引用 使用如
  • Qt之输入对话框(QInputDialog)的相关参数(Qt::InputMethodHints)和(QLineEdit::EchoMode)学习

    本文参考文章 Qt 编程 输入对话框 QInputDialog 的使用 学习笔记 前言 QInputDialog类提供了一个简单的便捷对话框 可以从用户那里获取用户录入的单个值 当前Qt提供了五个静态接口函数用于获取常用的数据类型参数 单文
  • 【华为OD机试真题2023 JS】上班之路

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 上班之路 知识点BFS搜索广搜 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 Jungle生活在美丽的蓝鲸城 大马路都是方方正正 但是每天马路的封闭情况都不一样
  • 在 Bash 中获取明天的日期:实用演练

    在系统管理和 shell 脚本世界中 操作日期和时间的能力至关重要 无论是用于计划任务 日志轮换还是简单地为文件添加时间戳 了解如何在脚本中使用日期都可以节省大量时间和精力 Bash Bourne Again Shell 为此提供了一组强大
  • 使用 PHP 和 Docker 设置开发环境

    本地开发环境对于 PHP 开发人员测试和调试应用程序至关重要 传统上 开发人员会依赖 XAMPP MAMP 或 WAMP 等工具 它们为本地开发提供成熟的 LAMP 堆栈 Linux Apache MySQL PHP 然而 随着应用程序变得
  • 如何使用 Iptables 在 Linux 中阻止 IP 地址

    Iptables 是 Linux 操作系统中内置的强大且灵活的防火墙工具 它用于建立 管理和配置IP数据包过滤规则表 Iptables 的常见用途之一是阻止或限制来自特定 IP 地址或 IP 地址范围的访问 本文提供了有关如何使用 Ipta
  • 如何在 Python 中创建和读取列表

    Python 是一种流行的编程语言 具有广泛的应用范围 包括数据科学 Web 开发和自动化 Python 中最基本 最重要的数据结构之一是列表 列表是值或项目的集合 可以是任何数据类型 包括字符串 整数 浮点数 甚至其他列表 在本文中 我们
  • 如何在 MacOS 上安装 Golang

    Go 是 Google 于 2009 年开发的一种编译型编程语言 由于其性能 可读性和简单性 它在软件开发行业中广受欢迎 Go 是一种通用编程语言 它的代码片段感觉很自然 与 C 或 Java 等其他语言相比 它可以用更少的代码行编写 Go
  • 什么是 Apache Prefork、Worker 和 Event MPM(多处理模块)

    Apache 是最流行的 Linux Web 服务器 大多数Linux系统管理员的学习阶段都是从Apache httpd Web服务器开始的 甚至我在学习过程中也使用过Apache Web服务器 在初始级别 系统管理员使用 Apache 他
  • 如何在 Debian 8 上安装 Ansible (Jessie)

    Ansible 是一种自动化工具 用于从单台计算机管理多个远程主机 它为您提供了针对大量远程主机的轻松配置 例如 您在多台机器上执行相同的任务 Ansible 为您提供了自动执行这些任务的选项 本教程将帮助您在 Debian 8 Jessi
  • Ubuntu 和 Debian Linux 中的 12 个 Apt 命令示例

    apt 命令是 Linux 操作系统中最强大 最通用的工具之一 它为用户提供了一个功能强大且易于使用的包管理系统 可用于轻松管理和安装软件 使用 apt 命令 用户可以快速轻松地从系统中搜索 安装 升级和卸载软件应用程序 本指南详细概述了
  • Linux 中的排序命令及实例

    The sort Linux 中的命令是 GNU Coreutils 包的一部分 此命令用于按升序 降序对指定文件或标准输入中的文本行进行排序 排序后的输出可以写入文件或显示在标准输出上 这 sort 命令是一个简单而强大的工具 可用于各种
  • 使用.nvmrc指定节点版本

    您可以使用特定的 Node js 版本锁定您的应用程序 这将帮助您隔离 Node js 应用程序的依赖关系 因此您可以在任何系统上快速安装所需的软件包 在本教程中 您将学习使用 nvmrc 文件指定 node js 版本的简单过程 使用 n
  • 如何在 Apache 中启用过期标头

    Apache 是一种高度灵活 功能强大且开源的 HTTP 服务器软件 广泛用于托管网站 它的功能之一是操作响应中的 HTTP 标头 该功能可以显着提高网站的性能 在这些操作中 启用 过期标头 是管理网站缓存行为的有效技术 本质上 过期标头告

随机推荐

  • 如何在 Ubuntu 20.04 上安装 Zoom

    Zoom 应用程序是当今最流行的应用程序之一 Zoom 云会议应用程序通过互联网上的实时消息传递和内容共享提供简化的视频会议 Zoom 客户端允许您无需登录应用程序即可加入会议 要开始新会议 您需要登录该应用程序 访问zoom us创建帐户
  • 如何在 Linux 中重命名文件和目录

    重命名文件是您经常需要在 Linux 系统上执行的最基本任务之一 您可以使用 GUI 文件管理器或通过命令行终端重命名文件 重命名单个文件很容易 但一次重命名多个文件可能是一个挑战 特别是对于 Linux 新手来说 在本教程中 我们将向您展
  • Linux 中的 Tr 命令及示例

    tr是 Linux 和 Unix 系统中的一个命令行实用程序 用于翻译 删除和压缩标准输入中的字符 并将结果写入标准输出 The tr命令可以执行删除重复字符 将大写转换为小写以及基本字符替换和删除等操作 通常 它通过管道与其他命令结合使用
  • Python 列表反转

    在 Python 中使用列表时 有时可能需要反转列表的元素 反转列表意味着列表的第一个元素成为最后一个元素 第二个元素成为倒数第二个元素 最后一个元素成为第一个元素 依此类推 在 Python 中 有几种不同的方法可以反转列表 具体取决于您
  • 如何在 CentOS 7 上安装 Java

    Java 是世界上最流行的编程语言之一 用于构建不同类型的应用程序和系统 本教程介绍如何在 CentOS 7 上安装 Java 的各种版本和实现 我们将向您展示如何安装 OpenJDK 以及 Oracle Java 先决条件 在继续本教程之
  • 如何在Ubuntu 18.04上配置MySQL主从复制

    MySQL 复制是一个允许数据从一台数据库服务器自动复制到一台或多台服务器的过程 MySQL 支持多种复制拓扑 其中主 从拓扑是最著名的拓扑之一 其中一台数据库服务器充当主服务器 而一台或多台服务器充当从服务器 默认情况下 复制是异步的 主
  • 在 CentOS 7 上安装 Odoo 12

    Odoo 是世界上最受欢迎的一体化商业软件 它提供一系列业务应用程序 包括 CRM 网站 电子商务 计费 会计 制造 仓库 项目管理 库存等等 所有这些都无缝集成 在本教程中 我们将向您展示如何安装Odoo12 来自 CentOS 7 计算
  • 如何在 Debian 9 上安装 Google Chrome 网络浏览器

    谷歌浏览器是世界上最流行的网络浏览器 它是专为现代网络打造的快速 直观且安全的浏览器 Chrome 不是开源浏览器 它不包含在默认的 Debian 存储库中 它是基于Chromium Debian 存储库中提供的开源浏览器 在本教程中 我们
  • 如何在 Ubuntu 20.04 上安装 VLC 媒体播放器

    VLC 是最流行的开源多媒体播放器之一 它是跨平台的 几乎可以播放所有多媒体文件以及 DVD 音频 CD 和不同的流媒体协议 本文介绍如何在 Ubuntu 20 04 上安装 VLC 媒体播放器 VLC 可以通过 Snapcraft 商店作
  • 如何在Linux中检查内核版本

    内核是操作系统的核心组件 它管理系统的资源 是计算机硬件和软件之间的桥梁 您可能需要了解 GNU Linux 操作系统上运行的内核版本的原因有多种 也许您正在调试与硬件相关的问题或了解影响旧内核版本的新安全漏洞 并且您想了解您的内核是否容易
  • 如何在 Ubuntu 18.04 上安装 Memcached

    Memcached 是一个免费开源的高性能内存键值数据存储 它最常用于通过缓存数据库调用结果中的各种对象来加速应用程序 在本教程中 我们将介绍在 Ubuntu 18 04 上安装和配置最新版本 Memcached 的过程 相同的说明适用于
  • 配置 Nginx 错误和访问日志

    Nginx 是一个开源的 高性能的 HTTP 和反向代理服务器负责处理互联网上一些最大网站的负载 管理时NGINX对于 Web 服务器 您将执行的最常见的任务之一是检查日志文件 了解如何配置和读取日志在排除服务器或应用程序问题时非常有用 因
  • 如何在 Debian 10 Linux 上安装 VirtualBox 来宾添加

    虚拟盒子是一款开源 跨平台虚拟化软件 允许您同时运行多个来宾操作系统 虚拟机 VirtualBox 提供了一组可以安装在来宾操作系统中的驱动程序和应用程序 VirtualBox Guest Additions 来宾添加为来宾计算机提供了多种
  • 【JS 逆向百例】百度翻译接口参数逆向

    文章目录 逆向目标 逆向过程 抓包分析 获取 token 获取 sign 完整代码 baidu encrypt js baidufanyi py 逆向目标 目标 百度翻译接口参数 主页 https fanyi youdao com 接口 h
  • 查看: 1280

    查看 1280 回复 0 电容三点式LC振荡器电路组成及工作原理简述 复制链接 husk2012 95 主题 0 听众 3189 积分 VIP会员 收听TA 发消息 电梯直达
  • line-height:1是什么意思

    line height 1是什么意思 其实仍旧是设置行高的一种方法 只不过简化了语句 举个例子 比如此时你设置了font size 20px 之后你设置了line height 1 转义过来的意思就是line height 20px 行高为
  • 傻瓜式-根据自定义规则编码生成

    private final ReentrantLock lock new ReentrantLock public Result addProvider Provider proNew new Provider try lock lock
  • c语言ox是什么意思啊,ox什么意思

    营销树今天精心准备的是 ox什么意思 下面是详解 OX是什么意思 OX是无色透明的化学液体邻二甲苯的英文简写 OX作为英文单词是可数名词 基本含义是牛 读音为 英 ks 美 ks 复数 oxen 同义词 wild ox 例句They are
  • 福大计算机学硕扩招,福州大学2021年推免数据,快来了解这所211大学的保研情况!...

    福州大学是省部共建高校 是 双一流 建设高校 是 211工程 建设高校 学校现有1个国家重点实验室 8个国家级工程研究中心 3个国家国际科技合作基地 3个教育部重点实验室 有11个博士后科研流动站 11个一级学科博士点 2021年推荐优秀应
  • Arthas开源一周年,Github Star 160K,我们一直在坚持什么?

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