一、简介
我们平时在线上或者开发中会遇到各种性能、功能等问题,在运行过程中需要查看方法入参、返回值,或者方法执行的堆栈时间,或者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,目录结构如下
1 | -rwxr-xr-x. 1 admin admin 1047 11月 7 11:54 ga.sh |
b. 安装
1 | cd greys |
三、待监控应用启动agent
pid为应用进程号
1 | ./ga.sh pid |
四、应用监控控制客户端
pid 为应用进程号, ip为应用所在机器, 3658为agent默认端口号
1 | ./greys.sh pid@ip:3658 |
或者远程访问telnet ip 3658
1 | ./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的信息 |
访问agent
1 | telnet 10.57.17.146 3658 或 ./greys.sh 17602 |
查看JVM已加载的类信息
1 | sc -df cn.fraudmetrix.norns.controller.ListValueController |
查看类方法
1 | sm -d cn.fraudmetrix.norns.controller.ListValueController * |
统计一段周期类方法执行情况(默认120s)
1 | monitor -c 5 *ListValueController queryCache |
追踪方法执行链
1 | trace cn.fraudmetrix.norns.controller.ListValueController queryCache |
查看方法执行时间
1 | ptrace -t -n 5 cn.fraudmetrix.norns.controller.ListValueController queryCache |
查看入参
1 | watch -b cn.fraudmetrix.norns.controller.ListValueController queryCache '"partnerCode="+params[0]' |
查看返回值
1 | watch -s cn.fraudmetrix.norns.controller.ListValueController queryCache returnObj -x 4 |
统计方法执行时间
1 | tt -t -n 3 cn.fraudmetrix.norns.controller.ListValueController queryCache |
重放请求
1 | tt -i 1055 -p |
查看方法栈
1 | stack cn.fraudmetrix.norns.controller.ListValueController queryCache |
参考地址:
https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pdf