一、安装
1、在线安装:curl -sLk http://ompc.oss.aliyuncs.com/greys/install.sh|bash
当前目录下会出现:greys.sh
默认的安装路径:/root/.greys/lib/1.7.6.6/greys
二、入门
1、./greys.sh vmid@ip:port
注:如不指定ip:port,则默认为127.0.0.1:3658
注:启动后,greys会打开客户端(ga?>),且后台会有个java进程(这个进程的端口号为3658)
验证:netstat -anp|grep LIST
2、会话也任务,session默认为5min后自动关闭
a、立即返回:敲下命令后Server端立即返回最终结果,后续无持续反馈信息,释放Client对输入的锁定,重新开放让用户输入信息,比如version、sc、sm等。
b、等待终止:等待中止的命令则是需要用户主动输入Ctrl+D完成的命令中止操作。命令执行后无法立即返回最终结果,而是不断的将中间产生的输出源源不断的输出到客户端中,这种命令比如stack、monitor等。
3、重要类结构
用于watch/tt命令,grovvy表达式的重要数据结构
Advice
|
+--ClassLoader loader (ClassLoader)
+--Class<?> clazz (目标类)
+--GaMethod method (目标方法,包括普通方法和构造函数)
+--Object[] params (调用参数)
+--Object returnObj (返回值)
+--Throwable throwExp (抛出异常)
在表达式中直接使用变量名,例如:watch -b *StringUtil* isEmpty params[0].length()
4、特点:
(1)多人并行操作(基于C/S架构的任务模式)
a、应用管理员拥有JVM进程权限,由他来首先在目标JVM上启动Greys
b、技术专家A和B平时没有对应机器的权限,但只要网络能访问,他们可以通过指定ip:port直接访问目标机器的JVM进程,仿佛在本地一般
(2)、sudo支持
成熟的线上管理环境一般都不会直接开放JVM部署用户权限给你,而是通过sudo-list来控制和监控用户的越权操作。由于greys.sh脚本中会对当前用户的环境变量产生感知,所以需要加上-H参数
如:sudo -u admin -H ./greys.sh 12345
(3)、TELNET的支持
Greys支持通过telnet来访问服务端,如果当你手头的机器没有安装Greys的客户端,你可以简单的通过telnet命令来进行访问。如:telnet 10.232.12.113 3658
三、命令
1、sc命令:“Search-Class”的简写,这个命令能搜索出所有已经加载到JVM中的Class信息。
例:sc -df *StartControllerr
2、sm命令:“Search-Method”的简写,这个命令能搜索出所有已经加载了Class信息的方法信息。
例:sm -d *StartControllerr *
3、monitor命令:监控该方法被调用的信息
例:monitor -c 5 com.share.dao.StartDao testDao
4、trace命令:帮你定位和发现因RT高而导致的性能问题缺陷
每次只能跟踪一级方法的调用链路,目前暂时没有精力去解决往下几个层级的调用。
例:trace com.share.dao.StartDao testDao
打印信息如下:
`---+Tracing for : thread_name="http-nio-8080-exec-1" thread_id=0x12;is_daemon=true;priority=5;
`---+[8001,8001ms]com.share.dao.StartDao:testDao()
+---[3001,3001ms]java.lang.Thread:sleep(@16)
+---[3001,0ms]java.io.PrintStream:println(@17)
+---[3001,0ms]com.share.User:toString(@18)
+---[3001,0ms]java.io.PrintStream:println(@18)
`---[8001,5000ms]com.share.dao.StartDao:testDao11(@19)
5、ptrace命令:命令为trace命令的强化版,通过指定渲染路径来完成对方法执行路径的渲染过程
例:ptrace -t com.share.dao.StartDao testDao --path=*StartDao*
打印信息如下:
`---+pTracing for : thread_name="http-nio-8080-exec-1" thread_id=0x12;is_daemon=true;priority=5;process=1002;
`---+[8002,8002ms]com.share.dao.StartDao:testDao(); index=1004;
`---[8002,5001ms]com.share.dao.StartDao:testDao11(); index=1003;
6、watch命令:能方便的让你观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参
例:watch -b com.share.dao.StartDao testDao params[0] -x 1
注:greys会将输出的对象按照指定层级进行剥开。-x 1表明展开第1层级。
打印信息如下:
@User[
name=@String[sunxj],
age=@Integer[26],
]
7、tt命令:记录下当时方法调用的所有入参和返回值、抛出的异常
-t:记录下类*Test的print方法的每次执行情况
-n 3:该方法调用3次自动结束本次事务(同:ctrl+d)
例:tt -t -n 3 com.share.dao.StartDao testDao 之后执行:tt -i process-id
四、文档