Arthas开源一周年,Github Star 160K,我们一直在坚持什么?
缘起
最近看到一个很流行的标题,《开源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
为例:
使用jad反编译代码
jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
使用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);}}
使用
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
使用
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,感谢他们贡献的改进:
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
Arthas开源一周年,Github Star 160K,我们一直在坚持什么?相关推荐
- Arthas开源一周年,Github Star 16K,我们一直在坚持什么?
缘起 最近看到一个很流行的标题,<开源XX年,star XXX,我是如何坚持的>. 看到这样的标题,忽然发觉Arthas从2018年9月开源以来,刚好一年了,正好在这个秋高气爽的时节做下总 ...
- Arthas 开源一周年,GitHub Star 16 K ,我们一直在坚持什么?
缘起 最近看到一个很流行的标题,<开源XX年,star XXX,我是如何坚持的>. 看到这样的标题,忽然发觉 Arthas 从 2018 年 9 月开源以来,刚好一年了,正好在这个秋高气爽 ...
- 如何看待 国产开源软件 购买 GitHub Star
GitHub (https://github.com) 是全球最大的 男性交友网站 (开源项目托管平台). 一个项目的流行程度通常可以看该项目的 Star (关注数), Star 越多, 说明这个项目 ...
- 开源应用诊断利器 Arthas GitHub Star 突破两万
一.Arthas Star突破2万啦 https://github.com/alibaba/arthas 随着微服务的流行,应用更加轻量和开发效率不断提升,但是带来的困境是线上问题排查越来越复杂困难. ...
- 新的开始 | Arthas GitHub Star 破万后的回顾和展望
为什么80%的码农都做不了架构师?>>> 一切新的开始,都始于一个里程碑. 2月20日上午,Java 开源诊断工具 Arthas 的 GitHub Star 突破10000,距 ...
- 开源项目在GitHub上贡献33.5W个Star!腾讯的十年“云”答卷,请收好!
来源:新智元 本文约2800字,建议阅读6分钟 本文带你观看腾讯云主办的「2020 Techo Park」开发者大会. [ 导读 ] 根据数据,GitHub中国开发者数量增至第二,仅次于美国.这一路来 ...
- 十年积累,5.4万GitHub Star一朝清零:开源史上最大意外损失
机器之心报道 编辑:蛋酱.小舟 我们找 GitHub CEO 求助,但为时已晚. 2022 年 2 月 15 日,GitHub 通过推特平台广播了一则消息:「我们的朋友 HTTPie 最近不小心将自己 ...
- 东京疫情数据开源当日斩获2k+ star,GitHub疫情项目源源不断
如果说上周的 GitHub 是股市附体 star 低迷不振,那么本周的 GitHub 像极了受到疫情影响而未开学的高校们,新生 GitHub 项少,能上 GitHub Trending 的数量更少,基 ...
- TDengine GitHub Star 数破万,拥抱开源是件很酷的事!
好消息!TDengine 开源 2 个月,GitHub Star 数破万! 今天是 TDengine 开源后的第 1 个月零 30 天. 其实,在我们准备宣布开源的前两天,每个人心里都有压力.虽然我们 ...
最新文章
- 【硬核】自己动手实现轻量级神经网络推理框架
- ajax跨域异常,ajax跨域问题
- C语言入门经典读书笔记 ----第六章 字符串和文本的应用
- jw摄像_Java命令行界面(第17部分):jw-options
- 【pl/sql番外篇】 存储过程 游标
- 语言课设医院诊疗系统_江苏孤独症孩子有哪些典型特征?上海六一儿童医院
- (转)The POM for 0.0.1-SNAPSHOT is missing, no dependency informat
- 如何提取明细表头_BIM/Revit常用技巧——如何添加项目参数
- [转帖]Windows7 结束更新 以及后期更新花费。
- PyTorch学习—15.PyTorch中TensorBoard的使用
- 力扣-148 排序链表
- redis常用的数据类型
- c语言实现模糊分类矩阵,模糊聚类分析C程序实现
- java语言使用tess4j识别苏康码图片
- ME21N采购订单增强-税码字段默认值
- Python基础之Flask快速入门2
- 微信小程序开发实例:猜数字小游戏
- Sun工作站Solaris系统设置双屏显示
- FPGA图像处理HLS实现RGB转灰度,提供HLS工程和vivado工程源码
- oracle 老白,老白对oracle性能的io调优--(摘自老白-一个金牌DBA的故事)
热门文章
- 地球引擎初级教程——JavaScript 简介(一文读懂如何使用GEE)
- 联想X260 win10 系统降级 Win7 方法
- 斯考特·杨(Scott Young)快速学习方法
- python学习之路(3)turtle画奥运五环
- 谋杀案和杨辉三角改进版
- 安卓8.1 AEX5.4 Xposed框架T9拨号移植
- 【日常吐槽 · 第八期】adb偶遇fooView
- Python:实现aliquot sum等分求和算法(附完整源码)
- linux 查看缓存命中率,命中率查詢
- 【Tensorflow教程笔记】常用模块 tf.function :图执行模式