最近看到一个很流行的标题,《开源XX年,star XXX,我是如何坚持的》。
看到这样的标题,突然发觉 Arthas 从 2018 年 9 月开源以来,恰好一年了,正好在这个秋高气爽的时节作下总结和回顾。java
Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜好。git
Github:[https://github.com/alibaba/ar...[1]](https://yq.aliyun.com/go/arti...
文档:[https://alibaba.github.io/arthas[2]](https://yq.aliyun.com/go/arti...github
回顾 Arthas Star 数的历史,一直保持快速增加,目前已经突破 16 K。web
感谢用户的支持,既是压力也是动力。在过去开源的一年里, Arthas 发布了 7 个 Release 版本,咱们一直坚持三点:shell
Arthas 一直把易用性放在第一位,在开源以后,咱们作了下面的改进:vim
尽管咱们在易用性下了很大的功夫,可是发现不少时候用户比较难入门,所以,咱们参考了 k8s 的 Interactive Tutorial ,推出了 Arthas 的在线教程:windows
经过基础教程,能够在交互终端里一步步入门,经过进阶教程能够深刻理解 Arthas 排查问题的案例。安全
另外,为了方便用户大规模部署,咱们实现了 tunnel server 和用户数据回报功能:app
Arthas 号称是 Java 应用诊断利器,那么咱们本身要对得起这个口号。在开源以后, Arthas 持续增长了 10 多个命令。工具
下面重点介绍两个功能。
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 。那么有两个问题:
[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
社区提交了一系列的改进,下面列出一些点(不完整):
另外,有 83 个公司/组织登记了他们的使用信息,欢迎更多的用户来登记:
基于 Arthas ,还产生了一些洐生项目,下面是其中两个:
广大用户在使用 Arthas 排查问题过程当中,分享了不少排查过程和心得,欢迎你们来分享。
回馈开源
Arthas 自己使用了不少开源项目的代码,在开源过程当中,咱们给 netty, ognl, cfr 等都贡献了改进代码,回馈上游。
后记
在作 Arthas 宣传小册子时, Arthas 的宣传语是:
“赠人玫瑰之手,经久犹有余香”
但愿 Arthas 将来能帮助到更多的用户解决问题,也但愿广大的开发者对 Arthas 提出更多的改进和建议。
参考资料
[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
阿里云双11亿元补贴提早领,进入抽取iPhone 11 Pro:https://www.aliyun.com/1111/2019/home?utm_content=g_1000083110
本文做者:中间件小哥
本文为云栖社区原创内容,未经容许不得转载。