最近看到一個很流行的標題,《開源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
本文做者:中間件小哥
本文爲雲棲社區原創內容,未經容許不得轉載。