Arthas 開源一週年,GitHub Star 16 K ,我們一直在堅持什麼?
緣起
最近看到一個很流行的標題,《開源XX年,star XXX,我是如何堅持的》。
看到這樣的標題,忽然發覺 Arthas 從 2018 年 9 月開源以來,剛好一年了,正好在這個秋高氣爽的時節做下總結和回顧。
Arthas 是 Alibaba 開源的 Java 診斷工具,深受開發者喜愛。
回顧 Arthas Star 數的歷史,一直保持快速增長,目前已經突破 16 K。
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 為例:
1、使用 jad 反編譯程式碼
jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
2、使用 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);
}
}
3、使用 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
4、使用 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]$ 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
社群提交了一系列的改進,下面列出一些點(不完整):
- 翻譯了大部分英文文件的
- trace 命令支援行號
- 打包格式支援 rpm/deb
- 改進命令列提示符為 arthas@pid
- 改進對 windows 的支援
- 增加 mbean 命令
- 改進 webconsole 的體驗
另外,有 83 個公司/組織登記了他們的使用資訊,歡迎更多的使用者來登記:
洐生專案
基於 Arthas ,還產生了一些洐生專案,下面是其中兩個:
- Bistoury : 去哪兒網開源的整合了 Arthas 的專案
- arthas-mvel : 一個使用 MVEL 指令碼的 fork
使用者案例分享
廣大使用者在使用 Arthas 排查問題過程中,分享了很多排查過程和心得,歡迎大家來分享。
回饋開源
Arthas 本身使用了很多開源專案的程式碼,在開源過程中,我們給 netty, ognl, cfr 等都貢獻了改進程式碼,回饋上游。
後記
在做 Arthas 宣傳小冊子時, Arthas 的宣傳語是:
“贈人玫瑰之手,經久猶有餘香”
希望 Arthas 未來能幫助到更多的使用者解決問題,也希望廣大的開發者對 Arthas 提出更多的改進和建議。
本文為雲棲社群原創內容,未經允許不得轉載。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949601/viewspace-2661408/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 我們為什麼很難堅持下去
- 一週漲 15k Star 的開源專案「GitHub 熱點速覽」Github
- 一週 8k Star 的 Notion 開源替代品 AppFlowy 誕生!APP
- 我成了 GitHub StarGithub
- 一天漲 23k Star 的開源專案「GitHub 熱點速覽」Github
- 我如何在一週開發出Tale應用獲得1k star
- 我兩年的堅持,值了!
- 僅1年GitHub Star數翻倍,Flink 做了什麼?Github
- 我是如何把 GitHub 開源專案做到 5300+ star 的Github
- 新的開始 | Arthas GitHub Star 破萬後的回顧和展望Github
- GitHub:我們為什麼會棄用jQuery?GithubjQuery
- 又一個開源便斬獲 7k star 的新模型「GitHub 熱點速覽」模型Github
- Github 上那些開源專案的 star 數Github
- 本週我們 55 人學了什麼
- 快手開源LivePortrait,GitHub 6.6K Star,實現表情姿態極速遷移AIGithub
- 不斷湧現新作,是什麼讓開發者們堅持做獨立遊戲?遊戲
- 為什麼一邊擔憂,一邊堅持?我們和這個小眾題材獲獎遊戲團隊聊了聊遊戲
- #AWS:為什麼我們要持續投資Rust?Rust
- ERP商談,你在堅持什麼?
- 4.7K+ Star!一款開源工作流開發平臺!
- 正式商用一週年,5G給我們生活帶來了什麼變化?
- Flutter開源專案 - appFlowy 真的是 Notion 的替代品? 一週暴漲 star 9k 多!FlutterAPP
- “作業系統的「冷板凳」要坐多久?”萬字長文解讀16年開源人的堅持作業系統
- 保障 Google Play 的安全,我們一直在努力Go
- 持續測試的興起:寫在 MeterSphere 開源專案 GitHub Star 數量突破 1000 之際Github
- GitHub Star 數量前 12 的開源無程式碼工具Github
- 專訪椰島遊戲CEO:我們「堅持」了10年,才做出一款《江南百景圖》遊戲
- 我在寫部落格的路上已堅持兩年
- 面對TypeScript,堅持JS的理由是什麼?TypeScriptJS
- 主宰遊戲屆,任天堂在堅持什麼?遊戲
- 為什麼要堅持寫技術博文
- 從 ABAP Netweaver 到 ABAP Platform,我們一直在努力Platform
- Github 1.9K Star的資料治理框架-AmundsenGithub框架
- 開源不到 48 小時獲 35k star 的推薦演算法「GitHub 熱點速覽」演算法Github
- 掘金採訪 GitHub CEO Nat Friedman — 我們應盡全力確保 Star 數真實Github
- 堅持寫作快兩年了,有些私藏工具跟你們分享
- 我為何從測試轉測試開發,並堅持了10年?
- 10大Python開源專案推薦(Github平均star2135)PythonGithub