定体文|摸鱼|Arthas 开源一周年, Star 16K,我们一直在坚持什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hengyunabc
V2EX    程序员

定体文|摸鱼|Arthas 开源一周年, Star 16K,我们一直在坚持什么?

  •  1
     
  •   hengyunabc
    hengyunabc 2019-09-27 11:40:43 +08:00 1998 次点击
    这是一个创建于 2256 天前的主题,其中的信息可能已经有所发展或是发生改变。

    迟到了

    缘起

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

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

    Arthas

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

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

    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 排查问题的案例。

    另外,为了方便用户大规模部署,我们实现了 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。

    横云断岭的专栏

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1032 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 23:33 PVG 07:33 LAX 15:33 JFK 18:33
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86