
Arthas 自2018年9月份上線以來
「傳送門」,已收獲近萬個star,感謝開發者們的認可。此次Arthas 3.1.0版本的釋出,不僅帶來大家投票出來的新LOGO,還帶來強大的新功能和更好的易用性,下面一一介紹。
線上教程
在新版本Arthas裡,增加了線上教程,使用者可以線上運作Demo,一步步學習Arthas的各種用法,推薦新手嘗試:
非常歡迎大家來完善這些教程。
增加記憶體編譯器支援,線上編輯熱更新代碼
3.1.0
版本裡新增指令
mc
,不是方塊遊戲mc,而是Memory Compiler。
在之前版本裡,增加了
redefine
指令,可以熱更新位元組碼。但是有個不友善的地方:需要把
.class
檔案上傳到伺服器上。
在
3.1.0
版本裡,結合
jad
/
mc
redefine
可以完美實作熱更新代碼。
以
Arthas線上教程裡的
UserController
為例:
- 使用jad反編譯代碼
jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
-
使用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); } }
- 使用
指令編譯修改後的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
-
指令,因為可以熱更新代碼redefine
$ redefine /tmp/com/example/demo/arthas/user/UserController.class redefine success, size: 1
絲滑的自動補全
在新版本裡,改進了很多指令的自動補全,比如
watch/trace/tt/monitor/stack
等。
下面是watch指令的第一個
Tab
補全結果,使用者可以很友善的一步步補全類名,函數名:
$ watch
com. sun. javax. ch. io. demo. jdk. org. java.
另外,新增加了
jad/sc/sm/redefine
等指令的自動補全支援,多按
Tab
有驚喜。
新版本的Web console
新版本的Web Console切換到了
xtermd.js
,更好地支援現代浏覽器。
- 支援
複制Ctrl + C
- 支援全屏
Docker鏡像支援
Arthas支援Docker鏡像了
- 使用者可以很友善地診斷Docker/k8s裡的Java程序
- 也可以很友善地把Arthas加到自己的基礎鏡像裡
參考:
https://alibaba.github.io/arthas/docker.html重定向重新設計
之前的版本裡,Arthas的重定向是會放到一個
~/logs/arthas-cache/
目錄裡,違反直覺。
在新版本裡,重定向和Linux下面的一緻,
>
>>
的行為也和Linux下一緻。
并且,增加了
cat
pwd
指令,可以配置使用。
總結
總之,
3.1.0
版本的Arthas帶了非常多的新功能,改進了很多的使用者體驗,歡迎大家使用回報。
- Arthas線上教程可以學到很多技巧
- jad/mc/redefine 一條龍非常強大
- 絲滑的自動補全值得嘗試
- 新版本的Web console有驚奇
Release Note:
https://github.com/alibaba/arthas/releases/tag/3.1.0本文作者:
斷嶺,社群ID hengyunabc,阿裡巴巴技術專家,目前主要負責 Arthas 開源項目的開發和社群維護。