阿里人都在使用的在線診斷工具—Arthas

Arthas 是Alibaba開源的Java診斷工具,深受開發(fā)者喜愛。當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:

  • 這個類從哪個 jar 包加載的?為什么會報各種類相關的 Exception?
  • 我改的代碼為什么沒有執(zhí)行到?難道是我沒 commit?分支搞錯了?
  • 遇到問題無法在線上 debug,難道只能通過加日志再重新發(fā)布嗎?
  • 線上遇到某個用戶的數(shù)據(jù)處理有問題,但線上同樣無法 debug,線下無法重現(xiàn)!
  • 是否有一個全局視角來查看系統(tǒng)的運行狀況?
  • 有什么辦法可以監(jiān)控到JVM的實時運行狀態(tài)?
  • 怎么快速定位應用的熱點,生成火焰圖?

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

Arthas 的命令、功能在其官方文檔有詳細介紹,對于Arthas的使用我最近會出一個整套系列文章,來講述我們日常是怎么用Arthas定位和排查問題!

image

擴展:java Instrumentation指的是可以用獨立于應用程序之外的代理(agent)程序來監(jiān)測和協(xié)助運行在JVM上的應用程序。這種監(jiān)測和協(xié)助包括但不限于獲取JVM運行時狀態(tài),替換和修改類定義等。Arthas 的整體邏輯也是在 Java 的Instrumentation基礎上來實現(xiàn)。

Arthas的操作流程(簡易)

官方提供了兩種使用方式 下載arthas-boot.jar 或者直接安裝使用 as. sh。這里說明前一種。

一、下載arthas-boot.jar

注明:個人環(huán)境是Mac環(huán)境,其他環(huán)境可借鑒參考

image

會將目標文件下載到當前目錄中。

二、運行arthas-boot.jar

可以看到執(zhí)行 java -jar arthas-boot.jar之后,它羅列了當前的java進程供你選擇,選擇之后,就可以對該進程進行監(jiān)控了。(也可以直接增加pid監(jiān)控,如:java -jar arthas-boot.jar pid)。在選擇好pid之后,它首先會將 arthas所需要的jar相關文件進行下載,然后做一些初始化的工作。

image

注:最后一行‘[arthas@1640]$’ ,說明打開進入了監(jiān)控客戶端,在這里就可以執(zhí)行相關命令進行查看了。可以使用quit(退出當前客戶端)、stop\shutdown(關閉arthas服務端,并退出所有客戶端)。除了在命令行查看外,還可以通過瀏覽器訪問http://127.0.0.1:8563/查看。如下圖:

image

當我們在shell端執(zhí)行quit,并重新java -jar arthas-boot.jar 1640當前進程后。會有這樣一個提示(表示目標進程已被監(jiān)聽,跳過attach)本篇暫時不講attach機制相關內容,感興趣的朋友可自行先查閱資料,后續(xù)篇章會慢慢講解。

這里是下載好之后的文件列表,也就是直接執(zhí)行第二種安裝方式‘curl -L https://alibaba.github.io/arthas/install.sh | sh’安裝的文件。

image

三、簡單操作arthas

通過輸入help可以看到,提供了很多的功能,tab可自動補全功能,

以下列表中標有注1的需要知道,這些命令通過asm字節(jié)碼增強技術來實現(xiàn),會在指定的方法中插入一些切面來實現(xiàn)數(shù)據(jù)統(tǒng)計及觀測功能。因此在線上、預發(fā)環(huán)境使用時,要明確需要觀測的類、方法及條件。診斷結束后要shutdown或者執(zhí)行reset命令。

image

這里就挑幾個常用的命令進行展示:

  • dashboard:查看jvm\線程\env基本信息(上面瀏覽器查看效果)
  • thread:查看線程的運行狀態(tài)
  • jad:反編譯class文件[通過自動補全,查找上線代碼是否包含自己新增的功能,很方便]

【以下的這幾個通過簡單測試代碼進行試用】
– sc:查看jvm中已經加載的類信息
– stack:調用棧信息
– Track:觀察方法執(zhí)行的時候哪個子調用比較慢:
– watch:觀察方法的執(zhí)行入?yún)?/p>

3.1 dashboard

主要展示了三部分內容,線程,jvm,java-env。每過幾秒會自動刷新

image

3.2 Thread

可以用來顯示線程的一些基本信息,使用語法如下

image

例如使用 -n ,顯示幾條線程信息,根據(jù)cpu使用率排序

image

3.3 jad

可以用來檢查線上的發(fā)布代碼是否是最新的??梢远ㄎ坏骄唧w類,或者具體方法。很方便.

image

3.4 mc redefine

編譯類,并外部加載。

可以查看

3.5 sc

查看jvm中加載的類的信息

image

例如查看java.util.Stack類信息

對于Arthas的使用我最近會出一個整套系列文章,來講述我們日常是怎么用Arthas定位和排查問題!正在寫案例中...敬請期待!

作者 | 智哥

原文鏈接

本文為碼農架構原創(chuàng)內容,未經允許不得轉載。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容