Arthas 是 Alibaba 開源的 Java 診斷工具,深受開發(fā)者喜愛。
Github:
https://github.com/alibaba/arthas[1]
文檔:
https://alibaba.github.io/arthas[2]
回顧 Arthas Star 數(shù)的歷史,一直保持快速增長(zhǎng),目前已經(jīng)突破 16 K。
Arthas Github Star歷史曲線
感謝用戶的支持,既是壓力也是動(dòng)力。在過去開源的一年里, Arthas 發(fā)布了 7 個(gè) Release 版本,我們一直堅(jiān)持三點(diǎn):
持續(xù)改進(jìn)易用性
持續(xù)增加好用的命令
從開源社區(qū)中獲取力量,回報(bào)社區(qū)
持續(xù)改進(jìn)易用性
Arthas 一直把易用性放在第一位,在開源之后,我們做了下面的改進(jìn):
開發(fā) arthas boot ,支持 Windows/Linux/Mac 統(tǒng)一體驗(yàn)
絲滑的自動(dòng)補(bǔ)全,參考了 jshell 的體驗(yàn)
高效的歷史命令匹配, Up/Down 直達(dá)
改進(jìn)類搜索匹配功能,更好支持 lambda 和內(nèi)部類
完善重定向機(jī)制
支持 JDK 9/10/11
支持 docker
支持 rpm/deb 包安裝
盡管我們?cè)谝子眯韵铝撕艽蟮墓Ψ?,但是發(fā)現(xiàn)很多時(shí)候用戶比較難入門,因此,我們參考了 k8s 的 Interactive Tutorial ,推出了 Arthas 的在線教程:
Arthas 基礎(chǔ)教程[3]
Arthas 進(jìn)階教程[4]
通過基礎(chǔ)教程,可以在交互終端里一步步入門,通過進(jìn)階教程可以深入理解 Arthas 排查問題的案例。
另外,為了方便用戶大規(guī)模部署,我們實(shí)現(xiàn)了 tunnel server 和用戶數(shù)據(jù)回報(bào)功能:
增加 tunnel server ,統(tǒng)一管理 Agent 連接
增加用戶數(shù)據(jù)回報(bào)功能,方便做安全管控
持續(xù)增加好用的命令
Arthas 號(hào)稱是 Java 應(yīng)用診斷利器,那么我們自己要對(duì)得起這個(gè)口號(hào)。在開源之后, Arthas 持續(xù)增加了 10 多個(gè)命令。
ognl 命令任意代碼執(zhí)行
mc 線上內(nèi)存編譯器
redefine 命令線上熱更新代碼
logger 命令一鍵查看應(yīng)用里的所有 logger 配置
sysprop 查看更新 System Properties
sysenv 查看環(huán)境變量
vmoption 查看更新 VM option
logger 查看 logger 配置,更新 level
mbean 查看 JMX 信息
heapdump 堆內(nèi)存快照
下面重點(diǎn)介紹兩個(gè)功能。
jad/mc/redefine 一條龍熱更新線上代碼
以 Arthas 在線教程 里的 UserController 為例:
1、使用 jad 反編譯代碼
jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
2、使用 vim 編譯代碼
當(dāng) user id 小于 1 時(shí),也正常返回,不拋出異常:
@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 命令,因?yàn)榭梢詿岣麓a
$ redefine /tmp/com/example/demo/arthas/user/UserController.class redefine success, size: 1
通過 logger 命令查看配置,修改 level
在網(wǎng)站壓力大的時(shí)候(比如雙 11 ),有個(gè)緩解措施就是把應(yīng)用的日志 level 修改為 ERROR 。那么有兩個(gè)問題:
復(fù)雜應(yīng)用的日志系統(tǒng)可能會(huì)有多個(gè),那么哪個(gè)日志系統(tǒng)配置真正生效了?
怎樣在線上動(dòng)態(tài)修改 logger 的 level ?
通過 logger 命令,可以查看應(yīng)用里 logger 的詳細(xì)配置信息,比如 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.
從開源社區(qū)中獲取力量,回報(bào)社區(qū)
感謝 67 位 Contributors
Arthas 開源以來,一共有 67 位 Contributors ,感謝他們貢獻(xiàn)的改進(jìn):
Arthas Contributors
社區(qū)提交了一系列的改進(jìn),下面列出一些點(diǎn)(不完整):
翻譯了大部分英文文檔的
trace 命令支持行號(hào)
打包格式支持 rpm/deb
改進(jìn)命令行提示符為 arthas@pid
改進(jìn)對(duì) windows 的支持
增加 mbean 命令
改進(jìn) webconsole 的體驗(yàn)
另外,有 83 個(gè)公司/組織登記了他們的使用信息,歡迎更多的用戶來登記:
洐生項(xiàng)目
基于 Arthas ,還產(chǎn)生了一些洐生項(xiàng)目,下面是其中兩個(gè):
Bistoury : 去哪兒網(wǎng)開源的集成了 Arthas 的項(xiàng)目
arthas-mvel : 一個(gè)使用 MVEL 腳本的 fork
用戶案例分享
廣大用戶在使用 Arthas 排查問題過程中,分享了很多排查過程和心得,歡迎大家來分享。
回饋開源
Arthas 本身使用了很多開源項(xiàng)目的代碼,在開源過程中,我們給 netty, ognl, cfr 等都貢獻(xiàn)了改進(jìn)代碼,回饋上游。
后記
在做 Arthas 宣傳小冊(cè)子時(shí), Arthas 的宣傳語是:
“贈(zèng)人玫瑰之手,經(jīng)久猶有余香”
希望 Arthas 未來能幫助到更多的用戶解決問題,也希望廣大的開發(fā)者對(duì) Arthas 提出更多的改進(jìn)和建議。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
更多關(guān)于云服務(wù)器,域名注冊(cè),虛擬主機(jī)的問題,請(qǐng)?jiān)L問西部數(shù)碼官網(wǎng):m.ps-sw.cn