準備
此文章目的不是爲了解釋什麼,就是爲了之後使用命令的時候有一個直觀的感覺
https://github.com/alibaba/arthas
https://alibaba.github.io/arthas/advanced-use.htmlhtml
啓動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
裏,而後在命令行下編繹啓動:java
javac Demo.java java Demo
進入arthas控制檯
打開Dos命令行窗口,在解壓的arthas目錄下執行as.bat pid
。
git
基礎命令
- 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
命令。apache
- monitor——方法執行監控
- watch——方法執行數據觀測
- trace——方法內部調用路徑,並輸出方法路徑上的每一個節點上耗時
- stack——輸出當前方法被調用的調用路徑
- tt——方法執行數據的時空隧道,記錄下指定方法每次調用的入參和返回信息,並能對這些不一樣的時間下調用進行觀測
options
- options——查看或設置Arthas全局開關
管道
Arthas支持使用管道對上述命令的結果進行進一步的處理,如sm org.apache.log4j.Logger | grep <init>
websocket
- grep——搜索知足條件的結果
- plaintext——將命令的結果去除顏色
- wc——按行統計輸出結果
後臺異步任務
當線上出現偶發的問題,好比須要watch某個條件,而這個條件一天可能纔會出現一次時,異步後臺任務就派上用場了,詳情請參考這裏markdown
- 使用 > 將結果重寫向到日誌文件,使用 & 指定命令是後臺運行,session斷開不影響任務執行(生命週期默認爲1天)
- jobs——列出全部job
- kill——強制終止任務
- fg——將暫停的任務拉到前臺執行
- bg——將暫停的任務放到後臺執行
Web Console
經過websocket鏈接Arthas。session