看到這樣的標題,忽然發覺 Arthas 從 2018 年 9 月開源以來,剛好一年了,正好在這個秋高氣爽的時節做下總結和回顧。

Arthas 是 Alibaba 開源的 Java 診斷工具,深受開發者喜愛。

Github:
https://github.com/alibaba/arthas[1]

文檔:
https://alibaba.github.io/arthas[2]

回顧 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 提出更多的改進和建議。

原文鏈接

本文為云棲社區原創內容,未經允許不得轉載。

更多關于云服務器域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » Arthas 開源一周年,GitHub Star 16 K ,我們一直在堅持什么?

登錄

找回密碼

注冊

主站蜘蛛池模板: 91老熟女老女人国产老| 人人澡人摸人人添| 中文字幕有码免费视频| 蓬溪县| av高清无码 在线播放| 国产亚洲精品久久久久婷婷图片 | 巨胸不知火舞露双奶头无遮挡| 91中文字幕在线一区 | 欧美裸体xxxx极品| 天堂影院一区二区三区四区| 日韩精品 中文字幕 视频在线| 亚洲va中文字幕无码久久不卡| 一区二区三区一级黄色片| 亚洲国产欧美在线人成大黄瓜| 欧美精品国产综合久久| 亚洲最大的成人网站| 国产成人午夜福利在线播放 | 中文字幕亚洲精品人妻| 国产乱久久亚洲国产精品| 国产91色综合久久高清| 久久精品国产只有精品96| 久久天天躁狠狠躁夜夜躁2o2o| 色悠悠国产精品免费在线| 成年无码av片在线蜜芽| 日本欧美一区二区三区在线播放 | 激情五月天自拍偷拍视频| 亚洲嫩模一区二区三区 | 在线中文字幕国产精品| 不卡在线一区二区三区视频 | 日本一区二区三本视频在线观看| 午夜福利免费视频一区二区| 毛片内射久久久一区| 欧产日产国产精品精品| 女同亚洲精品一区二区三| 18无码粉嫩小泬无套在线观看| 麻豆蜜桃av蜜臀av色欲av| 国产无人区码一区二区| 少妇放荡的呻吟干柴烈火动漫| 日本久久99成人网站| 正在播放酒店约少妇高潮| 狠狠躁夜夜躁人人爽天天5|