Arthas(阿爾薩斯) 能為你做什么?
Arthas
是Alibaba開源的Java診斷工具,深受開發者喜愛。
當你遇到以下類似問題而束手無策時,Arthas
可以幫助你解決:
-
這個類從哪個 jar 包加載的?為什么會報各種類相關的 Exception?
-
我改的代碼為什么沒有執行到?難道是我沒 commit?分支搞錯了?
-
遇到問題無法在線上 debug,難道只能通過加日志再重新發布嗎?
-
線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!
-
是否有一個全局視角來查看系統的運行狀況?
-
有什么辦法可以監控到JVM的實時運行狀態?
-
怎么快速定位應用的熱點,生成火焰圖?
Arthas
支持JDK 6+,支持Linux/Mac/Winodws,采用命令行交互模式,同時提供豐富的 Tab
自動補全功能,進一步方便進行問題的定位和診斷。
一、准備程序包
官方地址:https://alibaba.github.io/arthas/
下載地址:阿里雲鏡像:https://maven.aliyun.com/repository/public/com/taobao/arthas/arthas-packaging/3.2.0/arthas-packaging-3.2.0-bin.zip。這個比較快,其他我就不列入了。
配置遠程連接服務:arthas-tunnel-server-3.2.0.jar。
上面是准備工作。
二、部署
現在開始配置和部署服務:
將下載下來的arthas-packaging-3.2.0放到linux服務器上。我使用的是centos 7 ,解壓,
並將遠程監控服務arthas-tunnel-server-3.2.0.jar放到此文件夾,這塊沒有要求,我是為了方便。
下面就是啟動了!
三、啟動
我總結為兩種方式:
1.有一種簡單不安全的方式:
java -jar arthas-boot.jar --target-ip '192.168.232.100'
完事!如果你覺得這樣你能接受那你就不用往下看了。
2.使用arthas tunnel server連接遠程arthas
下面具體將操作方式!
啟動遠程連接服務:
端口默認為8080.我這邊做了調整。arthas agent連接的端口是7777。
java -jar -Dserver.port=8081 arthas-tunnel-server-3.2.0.jar &
啟動arthas:
java -jar arthas-boot.jar --tunnel-server 'ws://192.168.232.100:7777/ws'
注意上面的接口中的紅線框部分是agentId。后面連接會用到。
在瀏覽器輸入訪問地址:
http://192.168.232.100:8081/
192.168.232.100:是我啟動服務是配合的ip地址也就是服務器的地址。端口8081是我自定義的。
最終連接頁面:
至此服務已經配置完成。
四、常用命令
Arthas 基礎命令:
help 查看命令幫助信息
cls 清空當前屏幕區域
session 查看當前會話的信息
reset 重置增強類,將被 Arthas 增強過的類全部還原,Arthas 服務端關閉時會重置所有增強過的類
version 輸出當前目標 Java 進程所加載的 Arthas 版本號
history 打印命令歷史
quit 退出當前 Arthas 客戶端,其他 Arthas 客戶端不受影響
stop 關閉 Arthas 服務端,所有 Arthas 客戶端全部退出
keymap Arthas快捷鍵列表及自定義快捷鍵
dashboard 當前系統的實時數據面板
thread 查看當前 JVM 的線程堆棧信息
watch 方法執行數據觀測
trace 方法內部調用路徑,並輸出方法路徑上的每個節點上耗時
stack 輸出當前方法被調用的調用路徑
tt 方法執行數據的時空隧道,記錄下指定方法每次調用的入參和返回信息,並能對這些不同的時間下調用進行觀測
monitor 方法執行監控
jvm 查看當前 JVM 信息
vmoption 查看,更新 JVM 診斷相關的參數
sc 查看 JVM 已加載的類信息
sm 查看已加載類的方法信息
jad 反編譯指定已加載類的源碼
classloader 查看 classloader 的繼承樹,urls,類加載信息
heapdump 類似 jmap 命令的 heap dump 功能