最近看到一個很流行的標題,《開源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。