Java 診斷工具:greys-anatomy
誕生
很早的時候,我們使用BTrace排查問題,在感嘆BTrace的強大之余,也曾好幾次將線上系統折騰掛掉。2012年淘寶的聚石寫了HouseMD,將 常用的幾個Btrace腳本整合在一起形成一個獨立風格的應用,但其核心代碼用的是Scala,我們沒這方面的編程維護經驗,所以只好艷羨HouseMD 的才思敏捷而無法在其上增加功能。
于是乎,Greys誕生了。
PS:目前Greys僅支持Linux/Unix/Mac上的Java6+,Windows暫時無法支持
Greys是一個java進程執行過程中的異常診斷工具。 在不中斷程序執行的情況下輕松完成問題排查工作。
和HouseMD一樣,Greys-Anatomy取名同名美劇“實習醫生格蕾”,目的是向前輩致敬。代碼編寫的時候參考了BTrace和HouseMD兩個前輩的思路。
目標群體
-
有時候突然一個問題反饋上來,需要入參才能完成定位,但恰恰沒有任何日志。回去加上重新部署,一杯咖啡時間過去了,是不是很崩潰?
-
當你經過反復這樣幾次折騰之后變得聰明了,在自己的代碼的所有入參和出參地方都加上debug日志,但這次問題似乎暴露在別人的代碼中了...是不是很無奈?
-
突然遇到線上一個性能問題無法確定到底是哪個環節的耗時,只能反復抓jstack猜,還有沒有辦法可以好好的過日子啦?
遇到以上問題時,你就是我們這類工具的目標客戶,此類工具能利用Java6的Instrumentation特性,動態增強你所指定的類,獲取你想要到的信息。
我們的座右銘
讓程序解決繁瑣的事情
特性功能
交互方式
-
命令行交互
內置功能
-
查看加載類,方法信息
-
方法執行監控(調用量,成功失敗率,響應時間)
-
方法執行數據觀測(參數,返回結果,異常信息等)
-
方法執行數據記錄
-
性能開銷渲染
-
方法執行數據自定義觀測(js腳本)
-
查看方法調用堆棧
軟件特點
-
純Java實現的開源項目
-
安裝使用便捷,僅一個jar包
-
可無需重啟JVM進行CT式診斷
-
Groovy表達式展開變量,方便你查看入參、出參、異常、當前對象的各種屬性細節
-
常用分析命令集成,monitor、trace等
-
觀察變量的出入參
-
時間隧道,tt命令能以時間維度紀錄下監控期內的每一次調用環境
-
多人并行協作
基 于C/S架構的任務模式甚至能讓多人同時遠程到同一進程上執行不同的指令、腳本,非常適合團隊一起進行線上問題排查與跟蹤。Greys采用純Java編寫 并留有良好的擴展,如果你有需求,只要你會Java,就可以為你自己編寫想要的功能。 Greys最有利的武器是他的ONGL表達式,能讓你在感受到HouseMD集成功能便利的同時,也能發揮出自定義Btrace腳本的靈活。
-
應用管理員擁有JVM進程權限,由他來首先在目標JVM上啟動Greys
-
技術專家A和B平時沒有對應機器的權限,但只要網絡能訪問,他們可以通過指定ip:port直接訪問目標機器的JVM進程,仿佛在本地一般