https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pdf
一、簡介
我們平時在線上或者開發中會遇到各種性能、功能等問題,在運行過程中需要查看方法入參、返回值,或者方法執行的堆棧時間,或者jar沖突時類加載來自那個jar包等問題。我們在開發過程中,可能會打印log日志、手動去打印入參、返回值等,或者自己實現簡單的profile方法,代碼侵入性大且效率較低;另外我們可以使用類似btrace工具去跟蹤,這需要自己去實現btrace腳本,服務端需要啟動agent,也有點小麻煩。后來淘寶聚石用scala寫了個houseMD,但只支持到jdk1.6,后續也沒有更新了;后面又有淘寶同學借鑒了btrace和houseMD,寫了Greys,方便定位常見的java問題,下面簡單介紹其使用方法。
下載地址:http://ompc.oss.aliyuncs.com/greys/release/greys-1.7.6.4-bin.zip
二、安裝
a. 解壓greys-1.7.6.4-bin.zip,目錄結構如下
-rwxr-xr-x. 1 admin admin 1047 11月 7 11:54 ga.sh -rw-r--r--. 1 admin admin 10595 11月 7 11:54 greys-agent.jar -rw-r--r--. 1 admin admin 3472230 11月 7 11:54 greys-core.jar -rwxr-xr-x. 1 admin admin 7972 11月 7 11:54 greys.sh -rwxr-xr-x. 1 admin admin 2927 11月 7 11:54 gs.sh -rwxr-xr-x. 1 admin admin 683 11月 7 11:54 install-local.sh
b. 安裝
cd greys sh ./install-local.sh
三、待監控應用啟動agent
pid為應用進程號
./ga.sh pid
三、應用監控控制客戶端
pid 為應用進程號, ip為應用所在機器, 3658為agent默認端口號
./greys.sh pid@ip:3658
或者遠程訪問
./gs.sh ip
四、Greys命令詳解
命令 | 說明 |
---|---|
help | 查看命令的幫助文檔,每個命令和參數都有很詳細的說明 |
sc | 查看JVM已加載的類信息 |
sm | 查看已加載的方法信息 |
monitor | 方法執行監控 |
trace | 渲染方法內部調用路徑,並輸出方法路徑上的每個節點上耗時 |
ptrace | 強化版的trace命令。通過指定渲染路徑,並可記錄下路徑中所有方法的入參、返值;與tt命令聯動 |
watch | 方法執行數據觀測 |
tt | 方法執行數據的時空隧道,記錄下指定方法每次調用的入參和返回信息,並能對這些不同的時間下調用進行觀測 |
stack | 輸出當前方法被調用的調用路徑 |
js | 支持使用JavaScript腳本;支持CommonJS部分規范模塊化(BMD規范) |
version | 輸出當前目標Java進程所加載的Greys版本號 |
quit | 退出greys客戶端 |
shutdown | 關閉greys服務端 |
rest | 重置增強類,將被greys增強過的類全部還原 |
session | 查看當前會話 |
jvm | 查看當前JVM的信息 |
示列:
tt -t -n 100 *UserServiceImpl queryById +----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ | INDEX | PROCESS-ID | TIMESTAMP | COST(ms) | IS-RET | IS-EXP | OBJECT | CLASS | METHOD | +----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ | 1001 | 1001 | 2017-03-08 15:39:11 | 10 | true | false | 0x7204ebf1 | UserServiceImpl | queryById | +----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ | 1002 | 1002 | 2017-03-08 15:39:12 | 6 | true | false | 0x7204ebf1 | UserServiceImpl | queryById | +----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ | 1003 | 1003 | 2017-03-08 15:39:12 | 5 | true | false | 0x7204ebf1 | UserServiceImpl | queryById | +----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ | 1004 | 1004 | 2017-03-08 15:39:13 | 6 | true | false | 0x7204ebf1 | UserServiceImpl | queryById | +----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ | 1005 | 1005 | 2017-03-08 15:39:48 | 6 | true | false | 0x7204ebf1 | UserServiceImpl | queryById | +----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ | 1006 | 1006 | 2017-03-08 15:39:48 | 5 | true | false | 0x7204ebf1 | UserServiceImpl | queryById | +----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ | 1007 | 1007 | 2017-03-08 15:39:49 | 4 | true | false | 0x7204ebf1 | UserServiceImpl | queryById | +----------+------------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ | 1008 | 1008 | 2017-03-08 15:39:49 | 5 | true | false | 0x7204ebf1 | UserServiceImpl | queryById |
具體使用詳見:https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pdf