來源 | 阿里巴巴雲原生公眾號
Arthas Star 突破 2.5 萬啦
隨著微服務的流行,應用更加輕量和高效,但是帶來的困境是線上問題排查越來越複雜困難。傳統的 Java 排查問題,需要重啟應用再進行調試,但是重啟應用之後現場會丟失,問題難以復現。
因此自 2018 年 9 月,阿里巴巴開源了久經考驗,深受開發者喜愛的應用診斷利器 Arthas。
Arthas 通過創新的字節碼織入技術,可以在應用無需重啟時,查看調用上下文,高效排查問題;結合火焰圖,可以直接定位熱點,發現性能瓶頸;通過字節碼替換,實現在線熱更新代碼;同時支持黑屏化和白屏化診斷,可以連接診斷大規模的集群。
在 2020 年 5 月時,我們做了 Arthas Star 破 2 萬的回顧:
- 精益求精 | 開源應用診斷利器 Arthas GitHub Star 突破兩萬
冬去春又來,轉眼間一年過去了,Arthas 的 Star 數突破 2.5 萬了~
下面來回顧 Arthas 去年的一些數據和工作。
Arthas 過去一年的數據
1. Arthas Github Star 數突破 2.5W
2. Arthas Github Contributors 數
Arthas 的開源貢獻者人數從 85 增長到 119,非常感謝他們的工作:
3. Arthas 登記公司數從 117 增長到 151 家
過去一年,Arthas 在工商銀行、中原銀行、樸樸科技、貝殼找房、鬥魚等生產場景落地,歡迎更多用戶登記:https://github.com/alibaba/arthas/issues/111。
- 工商銀行打造在線診斷平臺的探索與實踐
4. Arthas 在線教程學習人次:133,996,學習時長:51798小時
人均體驗時長 23 分鐘以上。
5. Arthas zip 包月均下載 6.5w 次
上線了 Arthas 新網站之後,我們統計平均每個月 arthas zip 包下載 6.5 萬次。所以保守估計,Arthas 平均每個月診斷 6W+ 臺機器。
6. Arthas 在 ATA 年度技術搜索排行第 6
阿里內部的技術論壇 ATA 發佈年度熱搜關鍵詞 top 100,Arthas 作為 Java 診斷神器是唯一進入 top 10 的非集團指定產品。Arthas 在阿里內部的受歡迎程度可見一斑。
Arthas 過去一年的工作
在過去的一年裡,Arthas 發佈了 19 個 release 版本,做了大量的改進,下面列出一些重點:
- 全新的 Bytekit 字節碼增強框架
- 完整支持 HTTP API,所有命令都完成適配
- Tenlet/WebSocket/HTTP API 支持統一的鑑權方案
- 全新的熱更新命令 retransform
- Tunnel Server 支持集群部署,支持查看火焰圖,內部上線支持流計算應用
- 增加 arthas-spring-boot-starter 模塊,並支持 endpoint,用戶可以用編程方式引入 Arthas
- 上線 arthas.aliyun.com 網站,更好服務國內用戶
1. 全新的 Bytekit 字節碼增強框架
Github:https://github.com/alibaba/bytekit
Bytekit 框架可以通過簡潔的註解來實現字節碼增強,具體功能點:
- 豐富的注入點支持
- 動態的 Binding
- 可編程的異常處理
- 比如在函數入口做增強:
public static class SampleInterceptor {
@AtEnter(inline = true, suppress = RuntimeException.class,
suppressHandler = PrintExceptionSuppressHandler.class)
public static void atEnter(@Binding.This Object object,
@Binding.Class Object clazz,
@Binding.Args Object[] args,
@Binding.MethodName String methodName,
@Binding.MethodDesc String methodDesc) {
System.out.println("atEnter, args[0]: " + args[0]);
}
- inline 支持
- invokeOrigin 技術
比如在 Dubbo Filter 裡插入 APM 代碼:
@Instrument(Interface = "org.apache.dubbo.rpc.Filter")
public abstract class DubboFilter_APM {
public Result invoke(Invoker<?> invoker, Invocation invocation)
throws RpcException {
System.err.println("invoker class: " +
this.getClass().getName());
Result result = InstrumentApi.invokeOrigin();
return result;
}
}
通過 Bytekit 框架,Arthas:
- 解決了多個 watch/trace 命令會重複某個類的問題
- 統一使用一個 Transformer,解決了多個增強命令衝突問題
- 實現了動態增強功能,通過指定 ListenerId,watch/trace 命令可以一起協作
2. HTTP API 支持
Http API 提供類似 RESTful 的交互接口,請求和響應均為 JSON 格式的數據。相對於 Telnet/WebConsole 的輸出非結構化文本數據,Http API 可以提供結構化的數據,支持更復雜的交互功能。
3. 統一鑑權
在今天,應用的安全越來越受到重視。因此,診斷工具在提升診斷效率的同時,也要注意自身的安全性。
因為 Arthas 增加了 auth 命令,並且統一了 Telnet/WebSocket/HTTP API 的鑑權,參考:
4. 全新的熱更新命令 retransform
之前,Arthas 裡的 redefine 命令已經支持熱更新功能,但是容易和 jad 命令或者其它 java agent 衝突。因此,我們開發了全新的 retransform 命令。
retransform 命令和 watch/trace 命令等是同一機制下實現的。如果對同一個類執行多個命令,則會經過下面的處理:
retransform 命令 -> watch 命令 -> trace命令
可以看到,retransform 命令執行後,不會影響 watch/trace 命令。
5. Tunnel Server 支持集群部署
通過 Arthas Tunnel Server/Client 可以遠程管理/連接多個 Agent。Tunnel Server 新增加功能:
- 支持集群部署,支持 redis 存儲
- 支持 http proxy,查看火焰圖
6. arthas-spring-boot-starter
通過 arthas-spring-boot-starter,用戶可以直接以編程方式引入 Arthas,結合 Tunnel Server,可以輕鬆實現集群化管理。
7. 全新的網站 arthas.aliyun.com
之前,Arthas 的文檔放在 github io 的域名下,經常訪問失敗。為了改進訪問速度,因此,我們建設了全新網站,用戶訪問文檔和下載 Arthas,都更加方便快捷。
Arthas 有獎徵文活動
Arthas 徵文活動一共辦了七期,共收到投稿 30+ 篇,下面是一些優秀的文章:
- 工商銀行打造在線診斷平臺的探索與實踐
- Spring Boot 微服務性能下降九成!使用 Arthas 定位根因
- 是誰在調用我?使用 arthas+jprofiler 做複雜鏈路分析
- Arthas 定位 Dubbo 手動註冊 Eureka 異常
- 用 Arthas 神器來診斷 HBase 異常進程
有獎徵文活動還在繼續,歡迎大家分享~
投稿地址:http://alibabacloud.mikecrm.com/9khcRrs
Arthas 規劃
去年,我們規劃了三個目標:
- RESTful API 支持
- 全新的字節碼框架 ByteKit
- 插件化支持
實際上完成了 2.5 個,其中插件化支持,我們孵化出全新的 One Java Agent 項目來實現。
One Java Agent 項目的目標:
- 提供插件化支持,統一管理眾多的 Java Agent
- 插件支持 install/unstall,需要插件方實現接口
- 支持傳統的 java agent,即已經開發好的 java agent
從開源到現在,Arthas 在 Github 上一共有 1200 多個 Issue,最近我們回收了第一個 Issue:
在不斷增強功能的同時,我們一直在持續改進 Arthas 的易用性。
- 不斷改進幫助文檔
- 上線 arthas.aliyun.com ,改進國內用戶訪問速度
- 為大部分命令準備交互式的在線教程
我們相信:贈人玫瑰之手,經久猶有餘香,感謝廣大用戶的支持和喜愛。
歡迎登陸 start.aliyun.com 知行動手實驗室體驗 Arthas 57 個動手實驗:
https://start.aliyun.com/handson-lab/#!category=arthas
Arthas 實驗預覽