缘起

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

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

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

  • Github: https://github.com/alibaba/arthas
  • 文档:https://alibaba.github.io/arthas

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

感谢用户的支持,既是压力也是动力。在过去开源的一年里,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基础教程
  • 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]$ loggername                                   ROOTclass                                  ch.qos.logback.classic.LoggerclassLoader                            sun.misc.Launcher$AppClassLoader@2a139a55classLoaderHash                        2a139a55level                                  INFOeffectiveLevel                         INFOadditivity                             truecodeSource                             file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jarappenders                              name            CONSOLEclass           ch.qos.logback.core.ConsoleAppenderclassLoader     sun.misc.Launcher$AppClassLoader@2a139a55classLoaderHash 2a139a55target          System.outname            APPLICATIONclass           ch.qos.logback.core.rolling.RollingFileAppenderclassLoader     sun.misc.Launcher$AppClassLoader@2a139a55classLoaderHash 2a139a55file            app.logname            ASYNCclass           ch.qos.logback.classic.AsyncAppenderclassLoader     sun.misc.Launcher$AppClassLoader@2a139a55classLoaderHash 2a139a55blocking        falseappenderRef     [APPLICATION]

也可以在线修改logger的level:

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

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

感谢67位Contributors

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R3lWIJwB-1569563648008)(https://opencollective.com/arthas/contributors.svg?width=890&button=false)]

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

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

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

洐生项目

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

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

用户案例分享

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

回馈开源

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

后记

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

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

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

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

公众号

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

Arthas开源一周年,Github Star 16K,我们一直在坚持什么?相关推荐

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

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

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

    缘起 最近看到一个很流行的标题,<开源XX年,star XXX,我是如何坚持的>. 看到这样的标题,忽然发觉 Arthas 从 2018 年 9 月开源以来,刚好一年了,正好在这个秋高气爽 ...

  3. 如何看待 国产开源软件 购买 GitHub Star

    GitHub (https://github.com) 是全球最大的 男性交友网站 (开源项目托管平台). 一个项目的流行程度通常可以看该项目的 Star (关注数), Star 越多, 说明这个项目 ...

  4. 开源应用诊断利器 Arthas GitHub Star 突破两万

    一.Arthas Star突破2万啦 https://github.com/alibaba/arthas 随着微服务的流行,应用更加轻量和开发效率不断提升,但是带来的困境是线上问题排查越来越复杂困难. ...

  5. 新的开始 | Arthas GitHub Star 破万后的回顾和展望

    为什么80%的码农都做不了架构师?>>>    一切新的开始,都始于一个里程碑. 2月20日上午,Java 开源诊断工具 Arthas 的 GitHub Star 突破10000,距 ...

  6. 开源项目在GitHub上贡献33.5W个Star!腾讯的十年“云”答卷,请收好!

    来源:新智元 本文约2800字,建议阅读6分钟 本文带你观看腾讯云主办的「2020 Techo Park」开发者大会. [ 导读 ] 根据数据,GitHub中国开发者数量增至第二,仅次于美国.这一路来 ...

  7. 十年积累,5.4万GitHub Star一朝清零:开源史上最大意外损失

    机器之心报道 编辑:蛋酱.小舟 我们找 GitHub CEO 求助,但为时已晚. 2022 年 2 月 15 日,GitHub 通过推特平台广播了一则消息:「我们的朋友 HTTPie 最近不小心将自己 ...

  8. 东京疫情数据开源当日斩获2k+ star,GitHub疫情项目源源不断

    如果说上周的 GitHub 是股市附体 star 低迷不振,那么本周的 GitHub 像极了受到疫情影响而未开学的高校们,新生 GitHub 项少,能上 GitHub Trending 的数量更少,基 ...

  9. TDengine GitHub Star 数破万,拥抱开源是件很酷的事!

    好消息!TDengine 开源 2 个月,GitHub Star 数破万! 今天是 TDengine 开源后的第 1 个月零 30 天. 其实,在我们准备宣布开源的前两天,每个人心里都有压力.虽然我们 ...

最新文章

  1. 怎样处理重命名系列案例代码
  2. 5G最完整的PPT教材
  3. java多线程抽奖_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码...
  4. jQuery将不再支持IE6/7/8
  5. 查询sql一个字段重复的数据mysql_sql查询按两个字段查询重复记录
  6. mysql映射mapper_Mybatis中Mapper映射文件使用详解
  7. QML工作笔记-使用QML中的Date将时间戳和指定格式时间互转
  8. Keras中的循环层
  9. gsm模块 java 录音_Android GSM驱动模块详细分析
  10. Jqurey 得到url参数 getUrlParam
  11. 拓端tecdat|R语言中如何使用排队论预测等待时间?
  12. 搭建内网文件共享服务器,如何搭建共享服务器实现办公室文件共享?
  13. PotPlayer获取获取播放文件的实时码率信息
  14. 主流游戏引擎分析 【端游 、页游 、手游 解析】
  15. 大学英语四六级往年成绩查询+成绩单补办教程(四级/六级/4级/6级/46级)
  16. Spring Value注解的使用
  17. 《重构--改善既有代码的设计》--代码的坏味道(3)
  18. 从学校,到字节跳动,追忆似水流年
  19. 泰森多边形(Voronoi diagram)
  20. Python随机生成电话号码号码段分析

热门文章

  1. ios使用js日期函数处理时的问题
  2. 2020美赛E题解题思路方法:淹溺在塑料中
  3. 2020身高体重标准表儿童_2020儿童身高体重标准表(多图)
  4. 蓝牙助手的介绍以及使用
  5. 如何做好“强势型”领导的向上管理?
  6. DNS云学堂 | 智能DNS让CDN乘风破浪
  7. 安卓设备安全相关技术
  8. ArchSummit讲师专访:EMC研究院资深研究员陶隽谈实时数据分析
  9. java基础知识--(常用类)String类
  10. python音乐下载器交互界面设计_用python实现的百度音乐下载器-python-pyqt-改进版...