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

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

缘起

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

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

arthas_1_

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

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

65661356_05ca3480_e064_11e9_92ea_8cc21e45a71f_1_

感谢用户的支持,既是压力也是动力。在过去开源的一年里,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排查问题的案例。

另外,为了方便用户大规模部署,我们实现了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,感谢他们贡献的改进:

contributors_1_svg

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

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

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

65661477_5772bf00_e064_11e9_91c1_5cd32b09e7c6_1_

洐生项目

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

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

用户案例分享

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

65661495_5cd00980_e064_11e9_98e5_4b76956af1c4_1_

回馈开源

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

后记

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

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

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

相关文章
|
6月前
|
小程序 JavaScript 开发工具
如何运行github上的mpvue小程序开源项目
如何运行github上的mpvue小程序开源项目
71 0
|
9月前
|
Arthas 监控 Java
开源Java诊断工具Arthas:开篇之watch实战
还在为排查Java程序线上问题头痛吗,看我们用阿里开源的诊断神器 Arthas 来帮您
275 1
|
11天前
|
编解码 Java Linux
开源文档预览项目 kkFileView (9.9k star) ,快速入门
kkFileView 是一款文件文档在线预览解决方案,采用流行的 Spring Boot 框架构建,易于上手和部署。 该项目基本支持主流办公文档的在线预览,包括但不限于 doc、docx、xls、xlsx、ppt、pptx、pdf、txt、zip、rar,以及图片、视频、音频等格式。
开源文档预览项目 kkFileView (9.9k star) ,快速入门
|
13天前
|
JSON 安全 Java
Star 28.2k!这个开源库真是好用
阅读Hutool的源码是深入理解其工作原理的有效方式。通过阅读源码,你可以学习到Hutool的实现细节,了解其内部的逻辑和设计模式。这对于提高自己的编程技能和理解Hutool的精髓非常有帮助。由于分析源码需要更大的文章篇幅,后续有时间,V 哥再单独写一篇文章来解释这些好用工具类的源码分析。
|
5月前
|
监控 Java Docker
Github上热搜的Java开源商城项目合集,这个是真的好
今天GitHub热榜上又有一个项目成功引起了我的注意——mall-swarm
|
8月前
|
Arthas Java 测试技术
Arthas 进阶教程
本场景带您体验如何在Alibaba Cloud Linux  2.1903 LTS 64位操作系统的云服务器上通过 arthas-demo 和一个 Spring Boot 应用,演示 Arthas 命令的用法。
307 0
|
10月前
|
机器学习/深度学习 消息中间件 监控
阿里开源SpringBoot全栈小册!Github已标星百万
对于Spring Boot,我们都知道他的设计初衷是解决Spring各版本配置工作过于繁重的问题,简化初始搭建流程、降低开发难度而出现的。可以说用Spring Boot开发,我们在配置上是不用花费太多时间的。 我们常常看到这样一种现象:面对Spring繁重配置工作,要是一位初学者仅仅掌握了一点基础,可能花几天时间也配置不好环境。但是如果是用SpringBoot的话,完全就是“开箱即用”。Spring Boot有多香这一点想必大家也是有目共睹的,他对于Spring初学者来说是非常友好的,但是Spring Boot虽然易学但难“精”。即使在一线开发多年的老开发也不敢轻易说自己精通SpringBo
|
11月前
|
Arthas IDE Java
arthas 源码构建
arthas 源码构建
131 0
|
Arthas 监控 安全
浅谈阿里开源JVM Sandbox(内含代码实战)
浅谈阿里开源JVM Sandbox(内含代码实战)
46940 6
浅谈阿里开源JVM Sandbox(内含代码实战)
|
Arthas 监控 Java
Arthas入门使用
Arthas常用方法入门介绍
440 0
Arthas入门使用