最近看到一个很流行的标题,《开源XX年,star XXX,我是如何坚持的》。java
看到这样的标题,突然发觉Arthas从2018年9月开源以来,恰好一年了,正好在这个秋高气爽的时节作下总结和回顾。git
Arthas
是Alibaba开源的Java诊断工具,深受开发者喜好。github
回顾Arthas Star数的历史,一直保持快速增加,目前已经突破16K。web
感谢用户的支持,既是压力也是动力。在过去开源的一年里,Arthas发布了7个Release版本,咱们一直坚持三点:shell
Arthas一直把易用性放在第一位,在开源以后,咱们作了下面的改进:vim
Up/Down
直达尽管咱们在易用性下了很大的功夫,可是发现不少时候用户比较难入门,所以,咱们参考了k8s的 Interactive Tutorial,推出了Arthas的在线教程:windows
经过基础教程,能够在交互终端里一步步入门,经过进阶教程能够深刻理解Arthas排查问题的案例。安全
另外,为了方便用户大规模部署,咱们实现了tunnel server和用户数据回报功能:bash
Arthas号称是Java应用诊断利器,那么咱们本身要对得起这个口号。在开源以后,Arthas持续增长了10多个命令。app
下面重点介绍两个功能。
以 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
复制代码
在网站压力大的时候(好比双11),有个缓解措施就是把应用的日志level修改成ERROR。 那么有两个问题:
经过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.
复制代码
Arthas开源以来,一共有67位 Contributors,感谢他们贡献的改进:
社区提交了一系列的改进,下面列出一些点(不完整):
arthas@pid
mbean
命令另外,有83个公司/组织登记了他们的使用信息,欢迎更多的用户来登记:
基于Arthas,还产生了一些洐生项目,下面是其中两个:
广大用户在使用Arthas排查问题过程当中,分享了不少排查过程和心得,欢迎你们来分享。
Arthas自己使用了不少开源项目的代码,在开源过程当中,咱们给netty, ognl, cfr等都贡献了改进代码,回馈上游。
在作Arthas宣传小册子时,Arthas的宣传语是:
“赠人玫瑰之手,经久犹有余香”
但愿Arthas将来能帮助到更多的用户解决问题,也但愿广大的开发者对Arthas提出更多的改进和建议。
最后是抽奖环节,你们能够转发文章,在公众号后台留言本身和Arthas的故事,或者给Arthas提出建议,奖品是Arthas的卫衣一件:
欢迎关注横云断岭的专栏,专一Java,Spring Boot,Arthas,Dubbo。