Arthas
Arthas是阿里巴巴中間件團隊開源的Java診斷工具。它在阿里巴巴內部的開發者中被廣泛采用和流行。Arthas幫助開發人員在基於Java的應用程序的生產環境中排除問題,而無需修改代碼或重新啟動服務器
一.當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:
1.這個類從哪個 jar 包加載的?為什么會報各種類相關的 Exception?
2.我改的代碼為什么沒有執行到?難道是我沒 commit?分支搞錯了?
3.遇到問題無法在線上 debug,難道只能通過加日志再重新發布嗎?
4.線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!
5.是否有一個全局視角來查看系統的運行狀況?
6.有什么辦法可以監控到JVM的實時運行狀態?
7.怎么快速定位應用的熱點,生成火焰圖?
8.怎樣直接從JVM內查找某個類的實例?
提供性能看板,包括線程、cpu、內存等信息,並且會定時的刷新。
根據各種條件查看線程快照。比如找出cpu占用率最高的n個線程等
輸出jvm的各種信息,如gc算法、jdk版本、ClassPath等
查看/設置sysprop和sysenv
查看某個類的靜態屬性,也可以通過ognl語法執行一些語句
查看已加載的類的詳細信息,比如這個類從哪個jar包加載的。也可以查看類的方法的信息
dump某個類的字節碼到指定目錄
直接反編譯指定的類
查看類加載器的一些信息
可以讓jvm重新加載某個類
監控方法的執行,同時可以獲取到執行的入參、出參以及拋出的異常
追蹤方法執行的調用棧,以及各個方法的調用時間
Arthas Install
快速安裝
推薦使用 arthas-boot
下載arthas-boot.jar,然后用java -jar的方式啟動
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
如果下載速度比較慢,可以使用aliyun的鏡像:
curl -L https://arthas.aliyun.com/install.sh | sh
啟動命令:
java -jar arthas-boot.jar
輸入想要診斷的項目對應數字1
Arthas啟動成功
一.dashboard命令
輸入dashboard,按回車/enter,會展示當前進程的信息,按ctrl+c可以中斷執行。
進入當前系統的實時數據面板,按 ctrl+c 退出。這個面板會實時刷新,其中包括線程信息、內存信息、gc信息、還有一些運行時的數據。
另外,當運行在Ali-tomcat時,會顯示當前tomcat的實時信息,如HTTP請求的qps, rt, 錯誤數, 線程池信息等等。
二.thread命令
通過thread命令可以查看當前jvm進程的線程詳情。可以查看線程的cpu使用時間占比,通過指定各種參數可以找出最忙的幾個線程,以及阻塞其他線程的線程。具體如何使用這里不多做介紹,大家可以去看arthas的官方文檔。
thread命令查看全部線程信息
thread1 指定查看線程id
thread-n 3 展示當前最忙的3個線程展示堆棧
thread-b 找出當前阻塞其他線程的線程
thread--state WAITING 查看所有等待的線程
獲取指定線程的詳細信息
三.jad命令
Arthas jad 命令指定反編譯類
jad com.xxx.xxx.xxx.entity.StartAppImg
jad 路徑.類名