greys线上调试代码
软件的说明文档地址:https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pdf
文件位置:
>cd /usr/greys
如何获取pid:
>ps -ef|grep java
然后从输出中找到你需要的Java进程
如进程号为7737
启动脚本:
>/usr/greys/greys.sh 7737
所有命令
help 查看命令的帮助文档,每个命令和参数都有很详细的说明
sc 查看JVM已加载的类信息
sm 查看已加载的方法信息
monitor 方法执行监控
trace 渲染方法内部调用路径,并输出方法路径上的每个节点上耗时
ptrace 强化版的trace命令。通过指定渲染路径,并可记录下路径中所有方法的入参、返值;与tt命令联动。
watch 方法执行数据观测
tt 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
stack 输出当前方法被调用的调用路径
js 支持使用JavaScript脚本;支持CommonJS部分规范模块化(BMD规范)
version 输出当前目标Java进程所加载的Greys版本号
quit 退出greys客户端
shutdown 关闭greys服务端
reset 重置增强类,将被greys增强过的类全部还原
session 查看当前会话
jvm 查看当前JVM的信息
以下以xm-shop为例
1.sc
#(1).展示每个方法的详细信息
>sm -d *.MqttConfiguration getConsumer
#(2).展示MqttConfiguration这个类中的所有方法,可以用通配符*
>sm -d *MqttConfiguration *
2.monitor对匹配的类.方法的调用进行监控。
>monitor -c 5 *MachineLockServiceImpl dealOpenLockFeedback
3.(可以监控该方法下所有方法的调用情况只能一级,不能查看层级)
>trace *MachineLockServiceImpl dealOpenLockFeedback
4.ptrace命令
命令为trace命令的强化版,通过指定渲染路径来完成对方法执行路径的渲染过程
命令能主动搜索tracing-path-pattern所渲染的路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。
>ptrace *MachineLockServiceImpl dealOpenLockFeedback --path=*lock*
5.watch命令
能方便的让你观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写OGNL表达式进行对应变量的查看
watch -b *Test printAddress '"params[0]="+params[0]'
>watch -b *MachineLockServiceImpl dealOpenLockFeedback '"params[0]="+params[0]'
>watch -f *MachineLockServiceImpl dealOpenLockFeedback -x 2
6.tt命令
方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
>tt -t *MachineLockServiceImpl dealOpenLockFeedback
#找到上面输出的index,查看该次调用的详情
>tt -i 1001
#打印栈的情况
>jstack *MachineLockServiceImpl dealOpenLockFeedback
>tt -t *MachineLockServiceImpl dealOpenLockFeedback params[0].length==1
7.stack命令
很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多。或者你根本就不知道这个方法是从那里被执行了,
此时你需要的是stack命令。
>stack *MachineLockServiceImpl dealOpenLockFeedback