Java診斷工具 arthas

原文鏈接:http://www.apkbus.com/thread-603016-1-1.html

原文地址:http://www.apkbus.com/thread-603016-1-1.html

Arthas是阿里巴巴最近開源的一款在線診斷java應用程序的工具,是greys工具的升級版本,深受開發者喜愛。當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:

  • 這個類從哪個 jar 包加載的?爲什麼會報各種類相關的 Exception?
  • 我改的代碼爲什麼沒有執行到?難道是我沒 commit?分支搞錯了?
  • 遇到問題無法在線上 debug,難道只能通過加日誌再重新發布嗎?
  • 線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!
  • 是否有一個全局視角來查看系統的運行狀況?
  • 有什麼辦法可以監控到JVM的實時運行狀態?
  • Arthas採用命令行交互模式,同時提供豐富的 Tab 自動補全功能,進一步方便進行問題的定位和診斷。

項目地址:https://github.com/alibaba/arthas

官方文檔:https://alibaba.github.io/arthas/

關聯項目greys地址:https://github.com/oldmanpushcart/greys-anatomy

原理解析

attach:jdk1.6新增功能,通過attach機制,可以在jvm運行中,通過pid關聯應用

instrument:jdk1.5新增功能,通過instrument俗稱javaagent技術,可以修改jvm加載的字節碼

然後arthas和其他診斷工具一樣,都是先通過attach鏈接上目標應用,通過instrument動態修改應用程序的字節碼達到不重啓應用而監控應用的目的

快速體驗

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

curl -L https://alibaba.github.io/arthas/install.sh | sh

然後就可以看到當前目錄生成了一個as.sh的腳本,執行./as.sh,就會列出本機所有的java pid進程,選擇一個進程後,就會連接arthas的服務。使用起來超級簡單,然後試用了一下arthas提供的監控大盤功能,輸出結果如下,會動態刷新哦


可以看到,以上大盤信息,cpu使用比例,堆內存(新生代,伊甸園區,倖存者區)使用情況,應用GC次數,應用GC耗時都很清楚。

其他功能

以下是arthas其他的一些常用的功能,如應用方法調用入參出參監控(watch命令),記錄應用的每次調用時間片(tt命令),就不一一舉例了。請往下看

基礎命令

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相關

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

monitor——方法執行監控

watch——方法執行數據觀測

trace——方法內部調用路徑,並輸出方法路徑上的每個節點上耗時

stack——輸出當前方法被調用的調用路徑

tt——方法執行數據的時空隧道,記錄下指定方法每次調用的入參和返回信息,並能對這些不同的時間下調用進行觀測

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章