准備
此文章目的不是為了解釋什么,就是為了以后使用命令的時候有一個直觀的感受
https://github.com/alibaba/arthas
https://alibaba.github.io/arthas/advanced-use.html
啟動Demo
import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; public class Demo { static class Counter { private static AtomicInteger count = new AtomicInteger(0); public static void increment() { count.incrementAndGet(); } public static int value() { return count.get(); } } public static void main(String[] args) throws InterruptedException { while (true) { Counter.increment(); System.out.println("counter: " + Counter.value()); TimeUnit.SECONDS.sleep(1); } } }
把上面的內容保存到Demo.java
里,然后在命令行下編繹啟動:
javac Demo.java java Demo
進入arthas控制台
打開Dos命令行窗口,在解壓的arthas目錄下執行as.bat pid
。
基礎命令
- 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的系統屬性
- getstatic——查看類的靜態屬性
class/classloader相關
- sc——查看JVM已加載的類信息
- sm——查看已加載類的方法信息
- dump——dump 已加載類的 byte code 到特定目錄
- classloader——查看classloader的繼承樹,urls,類加載信息,使用classloader去getResource
monitor/watch/trace相關
請注意,這些命令,都通過字節碼增強技術來實現的,會在指定類的方法中插入一些切面來實現數據統計和觀測,因此在線上、預發使用時,請盡量明確需要觀測的類、方法以及條件,診斷結束要執行
shutdown
或將增強過的類執行reset
命令。
- monitor——方法執行監控
- watch——方法執行數據觀測
- trace——方法內部調用路徑,並輸出方法路徑上的每個節點上耗時
- stack——輸出當前方法被調用的調用路徑
- tt——方法執行數據的時空隧道,記錄下指定方法每次調用的入參和返回信息,並能對這些不同的時間下調用進行觀測
options
- options——查看或設置Arthas全局開關
管道
Arthas支持使用管道對上述命令的結果進行進一步的處理,如sm org.apache.log4j.Logger | grep <init>
- grep——搜索滿足條件的結果
- plaintext——將命令的結果去除顏色
- wc——按行統計輸出結果
后台異步任務
當線上出現偶發的問題,比如需要watch某個條件,而這個條件一天可能才會出現一次時,異步后台任務就派上用場了,詳情請參考這里
- 使用 > 將結果重寫向到日志文件,使用 & 指定命令是后台運行,session斷開不影響任務執行(生命周期默認為1天)
- jobs——列出所有job
- kill——強制終止任務
- fg——將暫停的任務拉到前台執行
- bg——將暫停的任務放到后台執行
Web Console
通過websocket連接Arthas。