建站服務器
緣起
最近看到一個很流行的標題,《開源xx年,star xxx,我是如何堅持的》。
看到這樣的標題,忽然發覺 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-onlycom.example.demo.arthas.user.usercontroller>/tmp/usercontroller.java2、使用 vim 編譯代碼
當 user id 小于 1 時,也正常返回,不拋出異常:
@getmapping("/user/{id}")publicuserfinduserbyid(@pathvariableintegerid){logger.info("id:{}",id);if(id!=null&&id<1){returnnewuser(id,"name" id);//thrownewillegalargumentexception("id<1");}else{returnnewuser(id,"name" id);}}3、使用 mc 命令編譯修改后的 usercontroller.java
$mc/tmp/usercontroller.java-d/tmpmemorycompileroutput:/tmp/com/example/demo/arthas/user/usercontroller.classaffect(row-cnt:1)costin346ms4、使用 redefine 命令,因為可以熱更新代碼
$redefine/tmp/com/example/demo/arthas/user/usercontroller.classredefinesuccess,size:1通過 logger 命令查看配置,修改 level
在網站壓力大的時候(比如雙 11 ),有個緩解措施就是把應用的日志 level 修改為 error 。那么有兩個問題:
復雜應用的日志系統可能會有多個,那么哪個日志系統配置真正生效了?
怎樣在線上動態修改 logger 的 level ?
通過 logger 命令,可以查看應用里 logger 的詳細配置信息,比如 fileappender輸出的文件, asyncappender 是否 blocking 。
[arthas@2062]$loggernamerootclassch.qos.logback.classic.loggerclassloadersun.misc.launcher$appclassloader@2a139a55classloaderhash2a139a55levelinfoeffectivelevelinfoadditivitytruecodesourcefile:/users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jarappendersnameconsoleclassch.qos.logback.core.consoleappenderclassloadersun.misc.launcher$appclassloader@2a139a55classloaderhash2a139a55targetsystem.outnameapplicationclassch.qos.logback.core.rolling.rollingfileappenderclassloadersun.misc.launcher$appclassloader@2a139a55classloaderhash2a139a55fileapp.lognameasyncclassch.qos.logback.classic.asyncappenderclassloadersun.misc.launcher$appclassloader@2a139a55classloaderhash2a139a55blockingfalseappenderref[application]也可以在線修改 logger 的 level :
[arthas@2062]$logger--nameroot--leveldebugupdateloggerlevelsuccess.從開源社區中獲取力量,回報社區
感謝 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 提出更多的改進和建議。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
cad打印線寬不顯示怎么辦麗江云服務器購買云計算核心技術Docker教程:解決Windows下docker端口映射問題終端高價拿下Hunbohui.com! 婚嫁類域名市場竟然這么吃香?帳號實名認證問題-域名及賬戶問題網站無法打開重啟提示失敗備案無法接入-備案平臺為什么百度云網盤服務器錯誤