阿里內部的那個牛逼帶閃電的Java診斷工具終於開源了

最近發現一個好玩的東西給你們分享一下-阿里的Arthas 。在阿里巴巴內部,有不少自研工具供開發者使用,其中有一款工具,是幾乎每一個Java開發都使用過的工具,那就是Arthas,這是一款Java診斷工具,是一款牛逼帶閃電的工具。該工具已於2018年9月份開源。java

轉自做者:Java入門到入墳 | 連接:www.jianshu.com/p/25305a05b…git

GitHub地址: github.com/alibaba/art…github

用戶文檔:alibaba.github.io/arthas/面試

在平常開發中,你是否遇到過如下問題

  • 這個類從哪一個 jar 包加載的?爲何會報各類類相關的 Exception?shell

  • 我改的代碼爲何沒有執行到?難道是我沒 commit?分支搞錯了?apache

  • 遇到問題沒法在線上 debug,難道只能經過加日誌再從新發布嗎?session

  • 線上遇到某個用戶的數據處理有問題,但線上一樣沒法 debug,線下沒法重現!jvm

  • 是否有一個全局視角來查看系統的運行情況?函數

  • 有什麼辦法能夠監控到JVM的實時運行狀態?工具

以上問題,統統能夠經過Arthas來進行問題診斷!!!是否是很好很強大。

Arthas支持JDK 6+,採用命令行交互模式,同時提供豐富的Tab自動補全功能,進一步方便進行問題的定位和診斷。

Arthas安裝

一、使用arthas-boot安裝

下載arthas-boot.jar,而後用java -jar的方式啓動:

打印幫助信息:

若是下載速度比較慢,可使用aliyun的鏡像:

二、使用as.sh安裝

Arthas 支持在 Linux/Unix/Mac 等平臺上一鍵安裝,請複製如下內容,並粘貼到命令行中,敲 回車 執行便可:

上述命令會下載啓動腳本文件 as.sh 到當前目錄,你能夠放在任何地方或將其加入到 $PATH 中。

直接在shell下面執行./as.sh,就會進入交互界面。

也能夠執行./as.sh -h來獲取更多參數信息。

快速入門

1. 啓動Demo

image.png

arthas-demo是一個簡單的程序,每隔一秒生成一個隨機數,再執行質因式分解,並打印出分解結果。

2. 啓動arthas

在命令行下面執行:

執行該程序的用戶須要和目標進程具備相同的權限。好比以admin用戶來執行:sudo su admin && java -jar arthas-boot.jar或sudo -u admin -EH java -jar arthas-boot.jar。

若是attatch不上目標進程,能夠查看~/logs/arthas/目錄下的日誌。

若是下載速度比較慢,可使用aliyun的鏡像:java -jar arthas-boot.jar --repo-mirror aliyun --use-http

java -jar arthas-boot.jar -h打印更多參數信息。

選擇應用java進程:

Demo進程是第2個,則輸入2,再輸入回車/enter。Arthas會attach到目標進程上,並輸出日誌:

3. 查看dashboard

輸入dashboard,按enter/回車,會展現當前進程的信息,按ctrl+c能夠中斷執行。

4. 經過sysenv命令來獲取到進程的Main Class

5. 經過jad來反編繹Main Class

6. watch

經過watch命令來查看demo.MathGame#primeFactors函數的返回值:

5. 退出arthas

若是隻是退出當前的鏈接,能夠用quit或者exit命令。Attach到目標進程上的arthas還會繼續運行,端口會保持開放,下次鏈接時能夠直接鏈接上。

若是想徹底退出arthas,能夠執行shutdown命令。

經常使用命令

基礎命令

help——查看命令幫助信息

cls——清空當前屏幕區域

session——查看當前會話的信息

reset——重置加強類,將被 Arthas 加強過的類所有還原,Arthas 服務端關閉時會重置全部加強過的類

version——輸出當前目標 Java 進程所加載的 Arthas 版本號

quit——退出當前 Arthas 客戶端,其餘 Arthas 客戶端不受影響

shutdown——關閉 Arthas 服務端,全部 Arthas 客戶端所有退出

keymap——Arthas快捷鍵列表及自定義快捷鍵

** jvm相關**

dashboard——當前系統的實時數據面板

thread——查看當前 JVM 的線程堆棧信息

jvm——查看當前 JVM 的信息

sysprop——查看和修改JVM的系統屬性

New! getstatic——查看類的靜態屬性

class/classloader相關

  • sc——查看JVM已加載的類信息
  • sm——查看已加載類的方法信息
  • dump——dump 已加載類的 byte code 到特定目錄
  • redefine——加載外部的.class文件,redefine到JVM裏
  • jad——反編譯指定已加載類的源碼

classloader——查看classloader的繼承樹,urls,類加載信息,使用classloader去getResource

monitor/watch/trace相關

  • monitor——方法執行監控
  • watch——方法執行數據觀測
  • trace——方法內部調用路徑,並輸出方法路徑上的每一個節點上耗時
  • stack——輸出當前方法被調用的調用路徑
  • tt——方法執行數據的時空隧道,記錄下指定方法每次調用的入參和返回信息,並能對這些不一樣的時間下調用進行觀測

請注意,這些命令,都經過字節碼加強技術來實現的,會在指定類的方法中插入一些切面來實現數據統計和觀測,所以在線上、預發使用時,請儘可能明確須要觀測的類、方法以及條件,診斷結束要執行 shutdown 或將加強過的類執行 reset 命令。

options

options——查看或設置Arthas全局開關

管道

Arthas支持使用管道對上述命令的結果進行進一步的處理,如sm org.apache.log4j.Logger | grep

  • grep——搜索知足條件的結果
  • plaintext——將命令的結果去除顏色
  • wc——按行統計輸出結果

以上,就是關於Arthas的簡單介紹,要想真正的融會貫通,真正的把他做爲一個排查問題的利器,還須要本身動手實踐下!所謂實踐出真知。

###閱讀更多

給你們推薦10個優秀的開源項目

Android面試整理(附答案)

老闆說,我們的APP包體積太大了

Android快速啓動——黑白屏最優解決方案

Android屏幕配適、版本配適與多語言支持

相信本身,沒有作不到的,只有想不到的

在這裏得到的不只僅是技術!

#
相關文章
相關標籤/搜索