來源 | 阿裡巴巴雲原生公衆号
Arthas Star 突破 2.5 萬啦
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SO4UDNhljY1QWO5QzM4ADOlVWN0YzM4czNkNjZkRmMm9CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
随着微服務的流行,應用更加輕量和高效,但是帶來的困境是線上問題排查越來越複雜困難。傳統的 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/bytekitBytekit 架構可以通過簡潔的注解來實作位元組碼增強,具體功能點:
- 豐富的注入點支援
- 動态的 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/9khcRrsArthas 規劃
去年,我們規劃了三個目标:
- 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=arthasArthas 實驗預覽