Arthas 初探--安装初步适用
作者 | agmtopy
【Arthas 官方社區正在舉行征文活動,參加即有獎品拿~點擊投稿】
由于在項目中遇到一種情況,某段代碼在進行單元測試和在 tomcat 容器中運行的性能相差數百倍,因此需要分析在不同環境下某個方法執行的具體時間,從而確定問題。Arthas 可以做到無侵入的監控應用遠行情況。
安裝
- github 項目地址:https://github.com/alibaba/arthas
- 文檔地址:alibaba.github.io/arthas/
安裝:
wget https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jarlinux 下直接執行,window 下載文件后執行。
執行完成后,顯示當前 path 中指定的 JDK 中正在運行的 java 進程輸入相應序號,進入 sh 命令,表示已連接成功。
初步使用
Arthas 命令初步使用,大概分為 5 類:
基礎命令
- help——查看命令幫助信息
- cat——打印文件內容,和 linux 里的 cat 命令類似
- pwd——返回當前的工作目錄,和 linux 命令類似
- cls——清空當前屏幕區域
- session——查看當前會話的信息
- reset——重置增強類,將被 Arthas 增強過的類全部還原,Arthas 服務端關閉時會重置所有增強過的類
- version——輸出當前目標 Java 進程所加載的 Arthas 版本號
- history——打印命令歷史
- quit——退出當前 Arthas 客戶端,其他 Arthas 客戶端不受影響
- shutdown——關閉 Arthas 服務端,所有 Arthas 客戶端全部退出
- keymap——Arthas快捷鍵列表及自定義快捷鍵
jvm相關
- dashboard——當前系統的實時數據面板
- thread——查看當前 JVM 的線程堆棧信息
- jvm——查看當前 JVM 的信息
- sysprop——查看和修改 JVM 的系統屬性
- sysenv——查看 JVM 的環境變量
- getstatic——查看類的靜態屬性
- New! ognl——執行 ognl 表達式
- New! mbean——查看 Mbean 的信息
class/classloader相關
- sc——查看 JVM 已加載的類信息
- sm——查看已加載類的方法信息
- jad——反編譯指定已加載類的源碼
- mc——內存編繹器,內存編繹 .java 文件為 .class 文件
- redefine——加載外部的 .class 文件,redefine 到 JVM 里
- dump——dump 已加載類的 byte code 到特定目錄
- classloader——查看 classloader 的繼承樹,urls,類加載信息,使用 classloader 去 getResource
monitor/watch/trace 相關
請注意,這些命令,都通過字節碼增強技術來實現的,會在指定類的方法中插入一些切面來實現數據統計和觀測,因此在線上、預發使用時,請盡量明確需要觀測的類、方法以及條件,診斷結束要執行 shutdown 或將增強過的類執行 reset 命令。
- monitor——方法執行監控
- watch——方法執行數據觀測
- trace——方法內部調用路徑,并輸出方法路徑上的每個節點上耗時
- stack——輸出當前方法被調用的調用路徑
- tt——方法執行數據的時空隧道,記錄下指定方法每次調用的入參和返回信息,并能對這些不同的時間下調用進行觀測
options
- options——查看或設置 Arthas 全局開關
使用實列
- trace 分析每個方法的具體執行時間
通過圖示表明調用 MongoTemplate.executeFindMultiInternal() 方法時,最耗時的方法是在 doWith() 方法,總共執行 10000 次,耗時 252.3064ms,最少一次調用耗時 0.0132ms,最大一次耗時 38.4329ms,分析原因還是在于數據量太大,MongoTemplate 通過循環遍歷出結果在進行序列化。
- jad 反編譯代碼工具
- watch 查看輸入參數與輸出參數
**params **表示入參,**target **表示當前的類,**returnObj **表示返回值。
- stack 查看被調用的路徑(向上)
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Lgws6AsQ-1598944945738)(https://ucc.alicdn.com/pic/developer-ecology/3999616aa0994085b5d05543757d84c6.png)]
- sc 查看 JVM 已加載的類信息
- thread 分析死鎖
可以看出當前線程正在等待 ReentrantLock$NonfairSync@118f1fb4,而持有這個對象的線程又在等待當前線程釋放,從而形成死鎖!
- thread 分析 CPU 占用
總結
先放一張官方的總結大圖:
總結:Arthas 是一個很優秀的 java 診斷工具,無論是安裝還是使用都很簡潔,并且使用文檔全面、清晰明了,值得好好研究一番。
Arthas 征文活動火熱進行中
Arthas 官方正在舉行征文活動,如果你有:
- 使用 Arthas 排查過的問題
- 對 Arthas 進行源碼解讀
- 對 Arthas 提出建議
- 不限,其它與 Arthas 有關的內容
歡迎參加征文活動,還有獎品拿哦~點擊投稿
“阿里巴巴云原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的公眾號。”
總結
以上是生活随笔為你收集整理的Arthas 初探--安装初步适用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用 Arthas 神器来诊断 HBase
- 下一篇: 是谁在调用我?使用 arthas+jpr